//------------------------------------------------------------------- LRESULT Statusbar_MenuSelect (HWND /*hwnd*/, WPARAM wParam, LPARAM lParam) { UINT fuFlags = (UINT) HIWORD (wParam) ; HMENU hMainMenu = NULL ; int iMenu = 0 ; // Handle non-system popup menu descriptions. if ((fuFlags & MF_POPUP) && (!(fuFlags & MF_SYSMENU))) { for (iMenu = 1 ; iMenu < MAX_MENUS ; iMenu++) { if ((HMENU) lParam == popstr[iMenu].hMenu) { hMainMenu = (HMENU) lParam ; break ; } } } // Display helpful text in status bar MenuHelp (WM_MENUSELECT, wParam, lParam, hMainMenu, hInst, hwndStatusBar, (UINT *) &popstr[iMenu]) ; return 0 ; }
void MenuInit( void ) { MenuBackground(); MenuTitle(); MenuItem(); MenuCentral(); MenuHelp(); }
//----------------------------------------------------------------------------- // NAME: FrameProc(HWND, unsigned, WORD, LONG) // DESCRIPTION: Processes messages for the main window. //----------------------------------------------------------------------------- LRESULT CALLBACK FrameProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: // This happens when window is first created { CLIENTCREATESTRUCT ccs; // Open the registry key we will be using g_reg.OpenKey(IMASM_REGISTRY_KEY); // Retrieve the handle to the window menu and assign the // first child window identifier. ccs.hWindowMenu = GetSubMenu(GetMenu(hWnd), 3); ccs.idFirstChild = IDC_CHILDBASE; // Create the MDI client window. g_hMDIClient = CreateWindowEx(0, "MDICLIENT", (LPCTSTR)NULL, WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)IDC_CLIENT, g_hInst, (LPVOID)&ccs); ShowWindow(g_hMDIClient, SW_SHOW); // Create the file pane window g_pFP = new FilePane(hWnd); // Create the status bar g_hStatBar = CreateWindowEx( 0, STATUSCLASSNAME, NULL, WS_VISIBLE | WS_CHILD | SBARS_SIZEGRIP, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)IDC_STATUS, g_hInst, 0); CreateToolbar(hWnd); if (g_bAutoUpdate) { SendMessage(g_hToolBar, TB_SETSTATE, (WPARAM)IDC_AUTO, (LPARAM)(TBSTATE_ENABLED | TBSTATE_CHECKED)); } // Fill up the popup structure HMENU hMenu = GetMenu(hWnd); HMENU hFile = GetSubMenu(hMenu, 0); HMENU hFormat = GetSubMenu(hMenu, 1); HMENU hProject = GetSubMenu(hMenu, 2); HMENU hWindow = GetSubMenu(hMenu, 3); HMENU hHelp = GetSubMenu(hMenu, 4); g_aPopup[0].hMenu = hMenu; g_aPopup[0].uiString = IDS_FILE_MENU; g_aPopup[1].hMenu = hFile; g_aPopup[1].uiString = IDS_FILE_MENU; g_aPopup[2].hMenu = hFormat; g_aPopup[2].uiString = IDS_FORMAT_MENU; g_aPopup[3].hMenu = hProject; g_aPopup[3].uiString = IDS_PROJECT_MENU; g_aPopup[4].hMenu = hWindow; g_aPopup[4].uiString = IDS_WINDOW_MENU; g_aPopup[5].hMenu = hHelp; g_aPopup[5].uiString = IDS_HELP_MENU; g_aPopup[6].hMenu = 0; g_aPopup[6].uiString = 0; return 0; }// WM_CREATE case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_NEW: HandleIDC_NEW(g_hMDIClient); break; case IDC_OPEN: HandleIDC_OPEN(g_hMDIClient); break; case IDC_OPENPROJECT: HandleIDC_OPENPROJECT(g_hMDIClient, g_pFP); break; case IDC_SAVEAS: if (HandleIDC_SAVEAS(g_hCurChild) == 0) { break; } // FALLTHROUGH: case IDC_SAVE: HandleIDC_SAVE(g_hCurChild); break; case IDC_FONT: HandleIDC_FONT(g_hMDIClient); break; case IDC_EXIT: PostMessage(hWnd, WM_CLOSE, 0, 0); break; case IDC_ABOUT: DialogBoxParam( g_hInst, MAKEINTRESOURCE(IDD_ABOUT), hWnd, (DLGPROC)AboutProc, 0); break; case IDC_AUTO: { DWORD dwState = SendMessage(g_hToolBar, TB_GETSTATE, (WPARAM)IDC_AUTO, 0); if ((dwState & TBSTATE_CHECKED) != 0) { g_bAutoUpdate = true; HighlightDoc(GetDlgItem(g_hCurChild, IDC_MAINRICHED)); SetTimer(hWnd, UPDATETIMER, 20000, NULL); } else { g_bAutoUpdate = false; KillTimer(hWnd, UPDATETIMER); } break; } case IDC_PRECOMPILE: HandleIDC_PRECOMPILE(g_hCurChild); break; case IDC_CASCADE: SendMessage(g_hMDIClient, WM_MDICASCADE, MDITILE_SKIPDISABLED, 0); break; case IDC_TILEHORIZ: SendMessage(g_hMDIClient, WM_MDITILE, MDITILE_HORIZONTAL | MDITILE_SKIPDISABLED, 0); break; case IDC_TILEVERT: SendMessage(g_hMDIClient, WM_MDITILE, MDITILE_VERTICAL | MDITILE_SKIPDISABLED, 0); break; case IDC_PROJECTNEW: HandleIDC_PROJECTNEW(hWnd, g_pFP); break; case IDC_PROJECTADDSOURCE: HandleIDC_PROJECTADDSOURCE(hWnd, g_pFP); break; case IDC_PROJECTADDINCLUDE: HandleIDC_PROJECTADDINCLUDE(hWnd, g_pFP); break; case IDC_PROJECTADDOTHER: HandleIDC_PROJECTADDOTHER(hWnd, g_pFP); break; case IDC_PROJECTREMOVE: HandleIDC_PROJECTREMOVE(hWnd, g_pFP); break; } break; case WM_NOTIFY: { LPNMHDR pHdr = (LPNMHDR)lParam; switch (pHdr->code) { case TTN_GETDISPINFO: { LPTOOLTIPTEXT lpttt; lpttt = (LPTOOLTIPTEXT)lParam; lpttt->hinst = g_hInst; // Specify the resource identifier of the descriptive // text for the given button. switch (lpttt->hdr.idFrom) { case IDC_NEW: lpttt->lpszText = MAKEINTRESOURCE(IDS_NEW); break; case IDC_OPEN: lpttt->lpszText = MAKEINTRESOURCE(IDS_OPEN); break; case IDC_OPENPROJECT: lpttt->lpszText = MAKEINTRESOURCE(IDS_OPENPROJECT); break; case IDC_SAVE: lpttt->lpszText = MAKEINTRESOURCE(IDS_SAVE); break; case IDC_SAVEAS: lpttt->lpszText = MAKEINTRESOURCE(IDS_SAVEAS); break; case IDC_AUTO: lpttt->lpszText = MAKEINTRESOURCE(IDS_AUTO); break; case IDC_PRECOMPILE: lpttt->lpszText = MAKEINTRESOURCE(IDS_PRECOMPILE); break; } break; } case NM_DBLCLK: case NM_RETURN: { char szPath[MAX_PATH]; if (g_pFP->GetCurSelPath(szPath, MAX_PATH)) { LoadFileIntoNewWindow(szPath); } break; } case TVN_KEYDOWN: { NMTVKEYDOWN *pKD; pKD = (NMTVKEYDOWN *)lParam; if (pKD->wVKey == VK_DELETE) { g_pFP->RemoveSelected(); } break; } default: break; } break; } case WM_MENUSELECT: { UINT uFlags = (UINT)HIWORD(wParam); HMENU hMain = NULL; UINT i = 0; if (uFlags & MF_SYSMENU) // Handle non-system popup menus { MenuHelp(WM_MENUSELECT, wParam, lParam, NULL, g_hInst, g_hStatBar, &i); } else if (uFlags & MF_POPUP) { MenuHelp(WM_MENUSELECT, wParam, lParam, GetMenu(hWnd), g_hInst, g_hStatBar, (UINT *)g_aPopup); } else { for (i = 1; i < iNumMenus; i++) { if ((HMENU)lParam == g_aPopup[i].hMenu) { MenuHelp(WM_MENUSELECT, wParam, lParam, GetMenu(hWnd), g_hInst, g_hStatBar, (LPUINT)&g_aPopup[i].uiString); break; } } } return 0; } case WM_CLOSE: DestroyChildren(g_hMDIClient); DestroyWindow(hWnd); break; case WM_SIZE: // Get size of client { int iClientX = LOWORD(lParam); int iClientY = HIWORD(lParam); SendMessage(g_hToolBar, TB_AUTOSIZE, 0, 0); int aiParts[] = {iClientX - 210, iClientX - 110, iClientX - 80, iClientX - 50, iClientX - 20}; SendMessage(g_hStatBar, SB_SETPARTS, (WPARAM)5, (LPARAM)aiParts); SendMessage(g_hStatBar, WM_SIZE, 0, 0); UpdateStatusBar(g_hCurChild); RECT rc; GetWindowRect(g_hToolBar, &rc); int cyTool = rc.bottom - rc.top; GetWindowRect(g_hStatBar, &rc); int cyStat = rc.bottom - rc.top; // Now resize the file pane int cxFilePane = iClientX / 5; g_pFP->Resize(0, cyTool, cxFilePane, iClientY - cyTool - cyStat); // And resize the MDI Client window MoveWindow(g_hMDIClient, cxFilePane, cyTool, iClientX - cxFilePane, iClientY - cyTool - cyStat, TRUE); // Do this on the first WM_SIZE message so the window is sized properly if (*g_szCmdLineFile != NUL) { LoadFileIntoNewWindow(g_szCmdLineFile); *g_szCmdLineFile = NUL; } return 0; // WM_SIZE } case WM_DESTROY: if (g_pFP) { delete g_pFP; } DoExitProcessing(hWnd); PostQuitMessage(0); break; // WM_DESTROY default: // Otherwise, let Windows process message break; }// end switch return DefFrameProc(hWnd, g_hMDIClient, message, wParam, lParam); }