windows sdk编程系列文章25 ---- 多文档界面

windows sdk编程系列文章25 ---- 多文档界面

ID:41033455

大小:86.00 KB

页数:17页

时间:2019-08-14

windows sdk编程系列文章25 ---- 多文档界面_第1页
windows sdk编程系列文章25 ---- 多文档界面_第2页
windows sdk编程系列文章25 ---- 多文档界面_第3页
windows sdk编程系列文章25 ---- 多文档界面_第4页
windows sdk编程系列文章25 ---- 多文档界面_第5页
资源描述:

《windows sdk编程系列文章25 ---- 多文档界面》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、windowssdk编程系列文章----多文档界面2008-04-3022:10本教程告诉你怎样创建MDI应用程序.事实上并不是很困难.理论:多文档界面(MDI)是同一时刻处理多个文档的应用程序的一个规范.你很熟悉记事本.它是单文档界面(SDI)的一个例子.记事本在一个时候只能处理一个文档.假如你希望打开另一个文档,你首先必须关闭你前面打开的那一个.你可以想象这有多麻烦.和MicrosoftWord相比:Word可以随心所欲的在同一时刻打开任意多个文档,而且可以让用户选择使用哪一个文档.Microsoft

2、Word是多文档界面(MDI)的一个例子.MDI应用程序有几个显著的特征:我列举其中的一些:·有主窗口,在客户区可以有多个子窗口.所有的子窗口都位于客户区.·最小化一个子窗口,它最小化到了主窗口的客户区的左下角.·最大化一个子窗口,它的标题和主窗口的标题合并到了一起.·你可以通过按Ctrl+F4键来关闭子窗口,还可以通过按Ctrl+Tab键在子窗口之间来切换.包含子窗口的主窗口被称为框架窗口.主窗口的客户区是子窗口活动的地方,因此有了'框架'这个名字.主窗口的任务要比普通窗口精细一些,因为它需要为MDI处

3、理一些协调工作.为了在你的客户区控制任意多个数目的子窗口,你需要一个特殊的窗口:客户窗口.你可以把客户窗口看成是覆盖框架窗口的整个客户区的一个透明的窗口.客户窗口才是所有MDI子窗口的实际的父亲.客户窗口是MDI子窗口的真实的监督者.框架窗口

4、客户窗口

5、

6、

7、

8、

9、

10、MDI子窗口1MDI子窗口2MDI子窗口3MDI子窗口4MDI子窗口n图1.一个MDI应用程序的层次结构创建框架窗口现在我们将注意力放到细节上来.首先你需要创建框架窗口.创建框架窗口的方法和普通窗口是相同的:调用CreateWindowEx.和普

11、通窗口相比,有两个主要的不同.第一个不同是你必须调用DefFrameProc来处理你的窗口不想处理的窗口信息而不是调用DefWindowProc.这是让Windows为你作的保持一个MDI应用程序的垃圾任务的一个方法.假如你忘记使用DefFrameProc,你的应用程序将不具有MDI的功能.DefFrameProc具有下列语法:LRESULTDefFrameProc(         HWNDhWnd,    HWNDhWndMDIClient,    UINTuMsg,    WPARAMwParam,

12、    LPARAMlParam);假如你将DefFrameProc和DefWindowProc作一个对比,你将会注意到它们之间的唯一的不同在于DefFrameProc有5个参数,而DefWindowProc只有4个.这个增加的参数是客户窗口的句柄.这个句柄是必须的,有了它Windows才可以发送MDI-相关的消息给客户窗口.第二个不同是你必须在你的框架窗口的消息循环中调用TranslateMDISysAccel.假如你希望Windows为你处理MDI相关的加速键,比如Ctrl+F4,Ctrl+Tab,那

13、么这是必须的.它具有下列语法:BOOLTranslateMDISysAccel(         HWNDhWndClient,    LPMSGlpMsg);第一个参数是客户窗口的句柄.对此你应该不会觉得惊讶.因为客户窗口是所有MDI子窗口的父亲.第二个参数是你通过调用GetMessage获得的MSG框架的地址.我们的想法是传递MSG结构给客户窗口,这样客户窗口可以检测在MSG结构中所包含的MDI相关的按键是不是按下去了.假如是的话,客户窗口处理这个信息,然后返回一个非零值,否则返回一个假值..创建框架

14、窗口的步骤总结如下:1.像平常一样填写WNDCLASSEX结构.2.通过调用RegisterClassEx注册框架窗口类.3.通过调用CreateWindowEx创建框架窗口.4.在消息循环中调用TranslateMDISysAccel.5.在窗口过程中,将未处理的消息传递给DefFrameProc而不是DefWindowProc.创建客户窗口现在我们有了框架窗口,我们可以开始创建客户窗口了.客户窗口类是由Windows预先注册的.类的名称为"MDICLIENT".你同样也需要将CLIENTCREATES

15、TRUCT的地址传递给CreateWindowEx.这个结构具有以下定义:typedefstruct{HANDLEhWindowMenu;UINTidFirstChild;}CLIENTCREATESTRUCT,*LPCLIENTCREATESTRUCT;dshWindowMenu是子菜单的句柄,这个子菜单显示Windows将要添加的MDI子窗口名称列表.我们需要对这一功能进行一点解释.假如你以前曾经使用过类似Microsof

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

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

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