📄 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 + -