?? 09.2.2 在窗口創建之后修改.txt
字號:
9.2.2 在窗口創建之后修改
以上就是在創建窗口之前,重新設計窗口類,然后利用這個新的窗口類去創建隨后的窗口,從而實
現修改程序窗口外觀的方法。當窗口創建完成之后,還能修改它的光標、圖標和
背景嗎?答案是:當然可以!這時可以利用全局API函數: SetClassLong來實現,該函數用來重置指定
窗口所屬窗口類的WNDCLASSEX結構體(是WNDCLASS結構的擴展)中指定數據成員的屬性,該函數的原
型聲明為:
DWORD SetClassLong( HWND hWnd , int nlndex, LONG dwNewLong );
其中,各個參數的含義如下所述:
. hWnd
指定要設置新屬性的窗口句柄。
. nlndex
指定要設置的屬性的索引,此參數的取值及其意義如表9.1所示:
表9.1 nlndex參數的取值及其意義
GCL_HBRBACKGROUND 設置新的背景畫刷
GCL_HCURSOR 設置新的光標
GCL_HICON 設置新的圖標
GCL_STYLE 設置新的窗口樣式
. dwNewLong
指定要設置的新的屬性值。
下面,我們在 Style程序巾實現在程序窗口創建之后修改窗口的光標、圖標和背景這一功能。首先,
需要把 Style程序中先前在框架類和視類的PreCreateWindow函數中我們自己添加的代碼注釋起來
或去掉。然后,在CMainFrame類的OnCreate函數的最后,但要在return語句之前,添加如例6所示
代碼中加灰顯示的那行語句。
例9-6
int CMainFrame : :OnCreate(LPCREATESTRUCT lpCreateStruct) {
// TODO : Delete these three lines工f you don't want the toolbar to
// be dockable
m_wndToolBar .EnableDocking(CBRS_AL工GN_ANY) ;
EnableDocking{CBRS_ALIGN_ANY);
DockControlBar{&m_wndToolBar) ;
SetClassLong(m_hWnd,GCL_HICON, (LONG)Loadlcon(NULL , IDI_ERROR));
return 0;
前面已經介紹過,在框架類中只有對窗口圖標的修改會對程序界面產生影響,而對窗口的光標和背
景的修改是不會產生什么效果的。因此,這里只需要調用SetClassLong函數設置程序窗口的圖標就
可以了。
讀者可以生成并運行Style程序,會發現程序窗口的圖標變成了錯誤符號形狀的圖標,就像如圖9.6
所示的那樣。
接下來,在Style程序的視類中修改視類窗口的光標和背景。對于CStyleView類來說, AppWizard
并沒有自動為它創建OnCreate函數,因此,我們需要為該類添加WM CREATE 消息的響應函數,然后
在這個響應函數 COnCreate函數)中,調用SetClassLong函數修改視類窗口的光標和背景,代碼如例
9-7所示。
例9-7
i nt CStyleView: :OnCreate(LPCREATESTRUCT lpCreateStruct)
if (CView: :OnCreate(lpCreateStruct) -1)
retur n -1;
// TODO: Add your spec工alized creat工on code here
SetClassLong(m_hWnd, GCL_HBRBACKGROUND , (LONG)GetStockObject(BLACK_BRUSH));
SetClassLong(rn_hWnd, GCL_HCURSOR, (LONG) LoadCursor (NULL,工DC_HELP)) ; r eturn 0 ;
上述例9-7所示代碼中,首先調用SetClassLong函數將視類窗口的背景修改為黑色,接著調用該函數
設置窗口的光標,將其設置為一個Help光標。讀者可以運行最新的Style程序,將會發現程序界面就
像如圖9.7所示的那樣。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -