Windows零基础入门:4.3 获取窗口类背景画刷句柄和使用窗口类背景画刷句柄

2015-10-19 16:18:201544人围观会员文章,禁止转载
简介本节课介绍了如何获取窗口类背景画刷句柄,然后介绍如何使用窗口,并实现了单击窗口切换窗口的背景颜色。还用两个窗口进行对比验证由一个窗口类信息创建的多个窗口共享一个窗口类信息,修改后可以相互影响。
   上节课我在《Windows零基础入门:4.2 获取窗口类信息之查询窗口类名称ID》一节中,详细介绍了窗口类ID的获取,也介绍了窗口类ID和窗口类名称的关系。讲解很详细,相信你应该看懂了吧。如果没有,请多看几遍,还不懂,留言!
   这节课我来讲一下获取窗口类的背景画刷句柄。我们使用的还是函数GetClassLong。使用下面的代码即可获得窗口类背景画刷:
HBRUSH hBrush=(HBRUSH)GetClassLong(hwnd,GCL_HBRBACKGROUND);
   你需要用一个HBRUSH画刷类型的变量来接收得到的画刷。因为GetClassLong函数返回的是LONG类型的值,与HBRUSH类型不一样,所以要强制转换。在《Windows零基础入门:4.1 获取窗口类信息之查询窗口类函数详细介绍》,你应该知道了GCL_HBRBACKGROUND索引的意义,就是用来获取窗口类的背景画刷句柄的。
   对于画刷是什么东西,我们在后面画图部分详细介绍,前面也有所提及。你只需要知道,画刷是用来画图用的,一般都是大面积的画,所以才叫画画的刷子即画刷。
   我们只要有这个画刷,就可以画图。当然,我们这里就已经知道了获取画刷的方法。代码也有了,也解释了。那是不是就讲完了呢?
   当然不是。我们在讲窗口类的部分,就要将学到的知识在这里尽可能多的使用,这样会学的更加深刻。当你学的很深刻了,用的很灵活了,那就学的差不多了。
   获取画刷倒是不难咯。这里我们需要了解背景技术知识,这是我们的核心。这也会是菜鸟学习和大神学习的区别,大神学习方法是抓住核心,而不是学习简单使用。只有抓住核心,使用才会灵活。
   窗口类的作用会影响所有由窗口类创建的窗口,这个在前面的课程讲过了。窗口类的信息对于这些窗口来讲,是全局性质的。所以,多个窗口相当于公用这个窗口类的信息。那么你在一个窗口中修改了窗口类的信息,那么在其他窗口中就可以得到改变后的信息。所以,我们这里不仅要对一个窗口的窗口类做改变验证,还要对两个窗口公用窗口类做验证,这样你会理解更加深入。当然,编写代码和思考问题的能力也会大大提升,所以,前提是,你一定要动手做,动脑想。
   我们先创建两个窗口,一个主窗口一个窗口2,他们用同一个窗口类创建,所以共用窗口类。在他们创建窗口时,都存储一下当前的窗口背景画刷句柄。用来做画刷切换使用的。默认的是白色的画刷,所以窗口默认是白色的背景。存储原始背景画刷代码如下:
case WM_CREATE://-窗口创建时 static HBRUSH hBgOld;hBgOld=(HBRUSH)GetClassLong(hwnd,GCL_HBRBACKGROUND);
   这里说一下,这个窗口过程函数,是不停的执行的,每一次都是从头开始执行,所以,窗口过程函数里的变量如果是局部的,下次又重新定义初始化,所以,不要用局部变量存储需要一直存在的值。所以我们使用static局部变量或者全局变量。为了直观方便,所以使用static静态变量类型了。
   然后在单击消息中,做一些处理。首先还是获取当前的背景画刷句柄,然后与存储的原始的句柄比较,如果一样就设置窗口类背景画刷为黑色,否则就用存储的画刷设置窗口类的背景画刷。这里就是先了切换。切换窗口类的代码如下:
HBRUSH hBrush;case WM_LBUTTONDOWN://-通过窗口类背景画刷实现窗口背景颜色切换 hBrush=(HBRUSH)GetClassLong(hwnd,GCL_HBRBACKGROUND);//-获取当前窗口类的背景画刷句柄 if(hBrush==hBgOld)SetClassLong(hwnd,GCL_HBRBACKGROUND,(LONG)GetStock
登陆系统,查看更多

阅读排行