MDI支援

王朝百科·作者佚名  2010-01-04  
宽屏版  字体: |||超大  

MDI支援

探讨Windows的MDI支援时需要发表一些新术语。主应用程式视窗称为「框架视窗」,就像传统的Windows程式一样,它是WS_OVERLAPPEDWINDOW样式的视窗。

MDI应用程式还根据预先定义的视窗类别MDICLIENT建立「客户视窗」,这一客户视窗是用这种视窗类别和WS_CHILD样式呼叫CreateWindow来建立的。这一呼叫的最后一个参数是指向一个CLIENTCREATESTRUCT型态的结构的指标。这个客户视窗覆盖框架视窗的显示区域,并提供许多MDI支援。此客户视窗的颜色是系统颜色COLOR_APPWORKSPACE。

文件视窗被称为「子视窗」。通过初始化一个MDICREATESTRUCT型态的结构,以一个指向此结构的指标为参数将讯息WM_MDICREATE发送给客户视窗,就可以建立这些文件视窗。

文件视窗是客户视窗的子视窗,而客户视窗又是框架视窗的子视窗。父-子视窗分层结构如图所示。

您需要框架视窗的视窗类别(及视窗讯息处理程式)和一个由应用程式支援的每类子视窗的视窗类别(及视窗讯息处理程式)。由于已经预先注册了视窗类别,所以不需要客户视窗的视窗讯息处理程式。

Windows 98的MDI支援包括一个视窗类别、五个函式、两个资料结构和12个讯息。前面已经提到了MDI视窗类别,即MDICLIENT,以及资料结构CLIENTCREATESTRUCT和MDICREATESTRUCT。在MDI应用程式中,这五个函式中的两个用于取代DefWindowProc:不再将DefWindowProc呼叫用于所有未处理的讯息,而是由框架视窗程序呼叫DefFrameProc,子视窗程序呼叫DefMDIChildProc。另一个MDI特有的函式TranslateMDISysAccel与第十章中讨论的TranslateAccelerator的使用方式相同。MDI支援也包括ArrangeIconicWindows函式,但有一条专用的MDI讯息使得此函式对MDI程式来说不再必要。

第五个MDI函式是CreateMDIWindow,它使得子视窗可以在单独的执行绪中被建立。这个函式不需要在单执行绪的程式中,我会展示这一点。

在下面的程式中,我将展示12条MDI讯息中的9条(其他三个讯息一般不用),这些讯息的字首是WM_MDI。框架视窗向客户视窗发送其中某个讯息,以便在子视窗上完成一项操作或者取得关于子视窗的资讯(例如,框架视窗发送一个WM_MDICREATE讯息给客户视窗,以建立子视窗)。讯息WM_MDIACTIVATE讯息有点特别:框架视窗可以发送这个讯息给客户视窗来启动一个子视窗,而客户视窗也把这个讯息发送给将被启动或者失去活动的子视窗,以便通知它们这一变化。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有