如何设置MDI客户端的大小和位置?

当使用CreateWindow时,似乎大小( xy )和位置( nWidthnHeight )参数都被忽略。 例如:

 CreateWindow(L"MDICLIENT", L"", WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 150, 10, 400, 300, hWnd, NULL, hInst, (LPVOID)&ccs); 

它始终与左上angularalignment,并采用父级的大小,如下所示。

在这里输入图像说明

(由于窗口背景是COLOR_WINDOW我们可以看到不同之COLOR_WINDOW )。

MDICLIENT的坐标对启动没有影响。 相反,您必须在WM_SIZE处理客户端大小,如下所示:

 LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndClient; switch (message) { case WM_CREATE: { hwndClient = CreateWindow(L"MDICLIENT", L"", WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, hInst, (LPVOID)&ccs); ... return 0; } case WM_SIZE: { RECT rc; GetClientRect(hwnd, &rc); SetWindowPos(hwndToolbar, 0, 0, 0, rc.right, 30, SWP_SHOWWINDOW); int x = 50; //right-edge of another toolbar... int y = 30; int w = rc.right - x; int h = rc.bottom - y; MoveWindow(hwndClient, x, y, w, h, 0); return 0; } ... } 

顺便说一下,除非添加MDI子,否则屏幕上看不到任何区别。 MDI的孩子会限制其移动到新的区域,它不会超过工具栏。