当使用CreateWindow
时,似乎大小( x
, y
)和位置( nWidth
, nHeight
)参数都被忽略。 例如:
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的孩子会限制其移动到新的区域,它不会超过工具栏。