小弟定义了一个全局的窗体句柄hMaster,它是主窗体的句柄,那么InitInstance过程是这样的:
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
hMaster=hWnd;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd); return TRUE;
}
然后在窗体过程中加入WM_LBUTTONDOWN消息处理:case WM_LBUTTONDOWN:
if(!hOther)
{
hOther=CreateWindowEx(WS_EX_MDICHILD,szWindowClass,_T("mYTOHER"),
WS_OVERLAPPEDWINDOW,30,30,400,400,hMaster,NULL,hInst,NULL);
if(!hOther)
MessageBox(NULL,_T("创建MDI子窗体失败"),_T("消息"),MB_OK);
ShowWindow(hOther,SW_NORMAL);
UpdateWindow(hOther);
}
break;
hOther是子窗体的句柄,窗体初始化时被赋成NULL.当我单击主窗体时,就会弹出消息框,说明MDI子窗体创建失败,请教各位大侠如何实现.
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
hMaster=hWnd;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd); return TRUE;
}
然后在窗体过程中加入WM_LBUTTONDOWN消息处理:case WM_LBUTTONDOWN:
if(!hOther)
{
hOther=CreateWindowEx(WS_EX_MDICHILD,szWindowClass,_T("mYTOHER"),
WS_OVERLAPPEDWINDOW,30,30,400,400,hMaster,NULL,hInst,NULL);
if(!hOther)
MessageBox(NULL,_T("创建MDI子窗体失败"),_T("消息"),MB_OK);
ShowWindow(hOther,SW_NORMAL);
UpdateWindow(hOther);
}
break;
hOther是子窗体的句柄,窗体初始化时被赋成NULL.当我单击主窗体时,就会弹出消息框,说明MDI子窗体创建失败,请教各位大侠如何实现.
HWND hClient;
HMENU hMenu = GetMenu(hMaster);
int numItems = GetMenuItemCount(hMenu) - 2;//倒数第2个子菜单项,即“窗口”菜单项if(numItems < 0)
numItems = 0;ccs.hWindowMenu = GetSubMenu(hMenu,numItems);numItems = GetMenuItemCount((HMENU)ccs.hWindowMenu);ccs.idFirstChild = GetMenuItemID((HMENU)ccs.hWindowMenu,numItems-1) + 10;hClient = CreateWindow("MDICLIENT",
NULL,
WS_VISIBLE | WS_CHILD | WS_BORDER |
WS_CLIPCHILDREN | WS_CLIPSIBLINGS |
MDIS_ALLCHILDSTYLES |
WS_VSCROLL | WS_HSCROLL,
0,0,0,0,
hMaster,
(HMENU)0xCAC,
hInst(),
(LPVOID)&ccs);该MDICLIENT创建成功后才能创建MDI子窗体:MDICREATESTRUCT mcs;int nCmdShow = SW_SHOW;
mcs.szClass = "MyMDIChildClass"; //事先RegisterClass注册的MDI子窗口类名
mcs.szTitle = "新文档1";
mcs.hOwner = hInst;
mcs.x = CW_USEDEFAULT; // x position
mcs.y = CW_USEDEFAULT; // y position
mcs.cx = CW_USEDEFAULT; // width
mcs.cy = CW_USEDEFAULT; // height
mcs.style = WS_OVERLAPPEDWINDOW;HWND hwndChild = (HWND)SendMessage(hClient,WM_MDICREATE,0,(LPARAM)&mcs);
if(hwndChild)
{
::ShowWindow(hwndChild,SW_SHOW);
}