HWND CreateNewMDIChild(PCONSOLE_MAINFRAME_WND Info, HWND hwndMDIClient) { MDICREATESTRUCT mcs; HWND hChild; mcs.szTitle = CreateNewConsoleTitle(); mcs.szClass = szMMCChildFrm; mcs.hOwner = GetModuleHandle(NULL); mcs.x = mcs.cx = CW_USEDEFAULT; mcs.y = mcs.cy = CW_USEDEFAULT; mcs.style = MDIS_ALLCHILDSTYLES; hChild = (HWND)SendMessage(hwndMDIClient, WM_MDICREATE, 0, (LPARAM)&mcs); if (hChild) { Info->nConsoleCount++; } return hChild; }
static LRESULT CALLBACK ConsoleMainFrameWndProc(IN HWND hwnd, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lParam) { PCONSOLE_MAINFRAME_WND Info; LRESULT Ret = FALSE; Info = (PCONSOLE_MAINFRAME_WND)GetWindowLongPtr(hwnd, 0); if (Info != NULL || uMsg == WM_NCCREATE) { switch (uMsg) { case WM_COMMAND: { switch (LOWORD(wParam)) { case ID_FILE_EXIT: PostMessage(hwnd, WM_CLOSE, 0, 0); break; } break; } case WM_NCCREATE: { MainFrameWndCount++; Info = HeapAlloc(hAppHeap, 0, sizeof(*Info)); if (Info != NULL) { ZeroMemory(Info, sizeof(*Info)); Info->hwnd = hwnd; SetWindowLongPtr(hwnd, 0, (LONG_PTR)Info); Info->hMenuConsoleRoot = LoadMenu(hAppInstance, MAKEINTRESOURCE(IDM_CONSOLEROOT)); Ret = TRUE; } break; } case WM_CREATE: { LPCTSTR lpFileName = (LPCTSTR)(((LPCREATESTRUCT)lParam)->lpCreateParams); if (lpFileName != NULL) { /* FIXME */ } else { Info->AppAuthorMode = TRUE; Info->lpConsoleTitle = CreateNewConsoleTitle(); } SetWindowText(Info->hwnd, Info->lpConsoleTitle); break; } case WM_NCDESTROY: SetMenu(Info->hwnd, NULL); if (Info->hMenuConsoleRoot != NULL) { DestroyMenu(Info->hMenuConsoleRoot); Info->hMenuConsoleRoot = NULL; } HeapFree(hAppHeap, 0, Info); if (--MainFrameWndCount == 0) PostQuitMessage(0); break; case WM_CLOSE: DestroyWindow(hwnd); break; default: goto HandleDefaultMsg; } } else { HandleDefaultMsg: Ret = DefWindowProc(hwnd, uMsg, wParam, lParam); } return Ret; }