典型的MDI应用程序必须注册两个窗口类:一个用于其框架窗口,一个用于其子窗口。如果应用程序支持多种类型的文档(例如,电子表格和图表),则它必须为每种类型注册一个窗口类。
框架窗口的类结构类似于非MDI应用程序中主窗口的类结构。MDI子窗口的类结构与非MDI应用程序中子窗口的结构略有不同,如下所示:
*类结构应该有一个图标,因为用户可以将MDI子窗口最小化为正常的应用程序窗口。
*菜单名称应为NULL,因为MDI子窗口不能有自己的菜单。
*类结构应该在窗口结构中预留额外的空间。有了这个空间,应用程序可以将数据(如文件名)与特定的子窗口相关联。
以下示例显示了Multipad如何注册其框架和子窗口类。
BOOL APIENTRY InitializeApplication()
{
WNDCLASS wc;
//注册框架类。
wc.style = 0;
wc.lpfnWndProc = (WNDPROC) MPFrameWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInst;
wc.hIcon = LoadIcon(hInst, IDMULTIPAD);
wc.hCursor = LoadCursor((HANDLE) NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (COLOR_APPWORKSPACE + 1);
wc.lpszMenuName = IDMULTIPAD;
wc.lpszClassName = szFrame;
if(!RegisterClass(& wc))
return FALSE;
//注册MDI子窗口类。
wc.lpfnWndProc = (WNDPROC) MPMDIChildWndProc;
wc.hIcon = LoadIcon(hInst, IDNOTE);
wc.lpszMenuName = (LPCTSTR) NULL;
wc.cbWndExtra = CBWNDEXTRA;
wc.lpszClassName = szChild;
if(!RegisterClass(& wc))
return FALSE;
return TRUE;
}