⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 09.2.2 在窗口创建之后修改.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 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 + -