深入MDI客户窗口编程

深入MDI客户窗口编程

ID:41032803

大小:23.47 KB

页数:7页

时间:2019-08-14

深入MDI客户窗口编程_第1页
深入MDI客户窗口编程_第2页
深入MDI客户窗口编程_第3页
深入MDI客户窗口编程_第4页
深入MDI客户窗口编程_第5页
资源描述:

《深入MDI客户窗口编程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、深入MDI客户窗口编程 在使用VC6.0/5.0的AppWizard生成MDI应用的时候,我们发现MDI主窗口的客户区背景千篇一律的是深灰的。VC6.0/5.0并没有提供修改其背景色的方法。甚至使用SDK编程也没有好的方法修改背景色。以至于微软的产品如Office也是灰蒙蒙的背景。那么,有没有办法将背景设置为自己喜欢的颜色呢?笔者在学习过程中摸索出一套随意改变客户区窗口颜色的方法。利用这套方法,可以将客户区窗口设为256色背景甚至设为BITMAP位图以至于动画等等。大大地增强了程序的多媒体效果。先介绍对MDI客户窗口编程的基本原理。一、MDI客户窗口一个M

2、DI应用的主框架窗口包含一个特殊的子窗口称为MDICLIENT窗口。MDICLIENT窗口负责管理主框架窗口的客户区。MDICLIENT窗口本身有自己的子窗口即由CMDIChildWnd派生的文档窗口,也就是MDI子窗口。MDI主框架窗口负责管理MDICLIENT子窗口。当控制条(菜单条,状态条等)发生变化时,MDI主框架窗口重新配置MDICLIENT窗口。MDICLIENT子窗口负责管理全部的MDI子窗口。父窗口负责将某些命令传递到子窗口。因此,消息队列发向MDI子窗口的消息由MDICLIENT窗口负责传递,发向MDICLIENT窗口和MDI子窗口的消息

3、由主框架窗口负责传递。这样,我们可以在主框架窗口截获关于MDICLIENT窗口的重画消息然后加入自己设计的代码。二、MDI客户窗口编程方法对MDI客户窗口编程有一定的难度。原因是MDIFrameWnd的客户区完全被MDICLIENT窗口覆盖掉了。这样,MDI主窗口类MDIFrameWnd的背景色和光标都不起作用。同时,微软并不支持将MDICLIENT窗口作为子类,MDICLIENT窗口只能使用标准的背景色和光标。所以,对MDI客户窗口编程不能象对普通窗口那样简单地重载WM_PAINT的消息处理函数。改变MDI客户窗口背景的方法有两种。使用CMDIFrame

4、Wnd::CreateClient函数:CreateClient(LPCREATESTRUCTlpCreateStruct,CMenu*pWindowMenu);参数lpCreateStruct是指向CREATESTRUCT结构的指针。在CREATESTRUCT结构中lpszClass项指向窗口类WNDCLASS结构。通过改变WNDCLASS结构中的HbrBackground项和hCursor项可以更改MDICLIENT窗口的背景刷和光标。由于该函数创建新的MDICLIENT窗口对象,必须在重载的主窗口的OnCreate成员函数中调用。该方法比较复杂,必须

5、手动创建MDI客户窗口,不能利用AppWizard自动提供的功能。而且,只能使用Windows95有限的16色背景刷。本文采用第二种方法。在主框架窗口的消息队列中截获发向MDI客户窗口的WM_PAINT消息并向主框架窗口发送一条标志消息。在这条标志消息的处理函数中对MDI客户窗口进行操作。该方法比较简捷,但有几点值得注意的地方。首先,如何截获MDI客户窗口WM_PAINT消息。MFC提供了PreTranslateMessage(MSG*pMsg)函数。它在消息发送到TranslateMessage和DispatchMessage函数以前预先解释消息。可以重

6、载该函数截获MDI客户窗口WM_PAINT消息:BOOLPreTranslateMessage(MSG*pMsg){if(pMsg->hwnd==m_hWndMDIClient&&pMsg->message==WM_PAINT)PostMessage(WM_PAINT);returnCMDIFrameWnd::PreTranslateMessage(pMsg);}其次,为简单起见,这里将标志消息设为MDI主窗口的WM_PAINT。在MDI主窗口WM_PAINT的消息处理函数中增加重画MDI客户窗口的代码。读者也可以自定义消息,不过麻烦一点。最后,由于对MD

7、I客户窗口的操作都是在主窗口完成的。如何在主窗口中获得MDI客户窗口的设备描述表呢。其实,在MDI主窗口类中有MDI客户窗口成员m_hWndMDIClient。按如下方法得到客户窗口的设备描述表dc.m_hDC=::GetDC(this->m_hWndMDIClient);然后就可以对客户窗口进行操作了。三、实例将客户窗口设为256色背景。使用AppWizard生成MDI应用TEST。在TEST.CPP中的函数,增加如下代码:BOOLCTestApp::InitInstance(){AfxEnableControlContainer();#ifdef_AF

8、XDLLEnable3dControls();//Callthis

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。