//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 窗口被创建 VOID CMainWnd::OnCreate() { #ifdef _MAKELANG OnViewLanguage(IDM_View_Default); #else // 列出语言 if (CLanguage::List(GetSubMenu(GetSubMenu(m_hMenu, 2), 12)) != IDM_View_Default) { // 翻译菜单 CLanguage::TranslateMenu(m_hMenu, MAKEINTRESOURCE(IDR_Menu)); } #endif // 创建 CClientWnd::Create(); // 设置菜单项状态 OnViewMenu(); // 注册热键 RegisterHotKey(m_hWnd, IDC_TrayIcon, MOD_WIN, 'V'); // 读取新近文件列表 CRecentFile::Load(GetSubMenu(m_hMenu, 0), 4); // 设置同步状态 //CRawVideo::SetSync(CIni::GetInt(INI_Synchronize)); //CheckCommand(IDM_Play_Synchronize, CRawPlayer::m_bSync); }
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (LOWORD(wParam)) { case IDM_FILE_EXIT: return OnFileExit(); case IDM_HELP_ABOUT: return OnHelp(); case IDW_VIEW_STATUSBAR: return OnViewStatusBar(); case IDW_VIEW_TOOLBAR: return OnViewToolBar(); case IDM_VIEW_LARGEICON: return OnViewLargeIcon(); case IDM_VIEW_SMALLICON: return OnViewSmallIcon(); case IDM_VIEW_LIST: return OnViewList(); case IDM_VIEW_REPORT: return OnViewReport(); case IDM_SHOW_HIDDEN: return OnShowHidden(); case IDM_VIEWMENU: return OnViewMenu(); } return FALSE; } // CMainFrame::OnCommand(...)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 切换查看菜单状态 VOID CMainWnd::OnViewMenu(UINT uCmd, BOOL bInitialize) { UINT i; BOOL bChecked; const PTSTR STR_KeyNames[] = { INI_Toolbar, INI_StatusBar, INI_AlwaysOnTop, INI_MinToTray, INI_ShowSplash, INI_ShowOpen, INI_PlayOnOpen }; // 获取 INI 键名索引号 i = uCmd - IDM_View_Toolbar; // 如果是有效命令 if (i < _NumOf(STR_KeyNames)) { // 切换菜单项 bChecked = !IsMenuChecked(uCmd); CheckCommand(uCmd, bChecked); // 如果不是初始化指定的切换,记录到 INI 中 if (bInitialize == FALSE) { CIni::SetInt(STR_KeyNames[i], bChecked); } switch (uCmd) { case IDM_View_Toolbar: case IDM_View_StatusBar: CClientWnd::ToggleBar(); break; case IDM_View_AlwaysOnTop: // 总在最前 SetWindowPos(m_hWnd, bChecked ? HWND_TOPMOST : HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); return; case IDM_View_MinToTray: // 最小化到系统托盘 if (bChecked && (bInitialize == FALSE)) { CloseWindow(m_hWnd); } return; default: return; } } // 如果是初始化菜单项 else if (bInitialize) { // 初始化菜单项 for (i = 0; i < _NumOf(STR_KeyNames); i++) { // 默认是否选择 bChecked = IsMenuChecked(IDM_View_Toolbar + i); // 如果默认选择与 INI 中不一样 if (bChecked != (BOOL) CIni::GetInt(STR_KeyNames[i], bChecked)) { // 切换菜单项 OnViewMenu(IDM_View_Toolbar + i, TRUE); } } } }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 命令处理 VOID CMainWnd::OnCommand(WPARAM wParam, LPARAM lParam) { PTSTR p; DWORD dwSize; CChildWnd *pWnd; TCHAR tzTemp[512]; TCHAR tzPath[512]; if ((LOWORD(wParam) >= IDM_View_Default) && (LOWORD(wParam) < IDM_View_Default + 50)) { // 改变语言 if (IsMenuChecked(LOWORD(wParam)) == FALSE) { OnViewLanguage(LOWORD(wParam)); } return; } else if ((LOWORD(wParam) >= IDM_File_Recent) && (LOWORD(wParam) < IDM_File_Recent + 10)) { // 打开新近文件 GetMenuString(m_hMenu, LOWORD(wParam), tzTemp, _NumOf(tzTemp), MF_BYCOMMAND); OnFileOpen(tzTemp + 4); return; } switch (LOWORD(wParam)) { case IDM_File_Open: OnFileOpen((PTSTR) lParam); break; case IDM_File_Exit: PostMessage(m_hWnd, WM_CLOSE, 0, 0); break; case IDM_View_Toolbar: case IDM_View_StatusBar: case IDM_View_AlwaysOnTop: case IDM_View_MinToTray: case IDM_View_ShowSplash: case IDM_View_ShowOpen: case IDM_View_PlayOnOpen: // 查看选项 OnViewMenu(LOWORD(wParam), FALSE); break; case IDM_View_AssociateFile: GetModuleFileName(NULL, tzPath, MAX_PATH); wsprintf(tzTemp, TEXT("\"%s\" \"%%1\""), tzPath); dwSize = _NumOf(tzPath); SHGetValue(HKEY_CLASSES_ROOT, STR_AppName TEXT("\\shell\\open\\command"), NULL, NULL, tzPath, &dwSize); if (lstrcmpi(tzTemp, tzPath) == 0) { SHDeleteKey(HKEY_CLASSES_ROOT, STR_AppName); for (p = STR_ExtList; *p; p += lstrlen(p) + 1) { SHDeleteKey(HKEY_CLASSES_ROOT, p); } } else { SHSetValue(HKEY_CLASSES_ROOT, STR_AppName TEXT("\\shell\\open\\command"), NULL, REG_SZ, tzTemp, _StrSize(tzTemp)); GetModuleFileName(NULL, tzPath, MAX_PATH); wsprintf(tzTemp, TEXT("\"%s\",1"), tzPath); SHSetValue(HKEY_CLASSES_ROOT, STR_AppName TEXT("\\DefaultIcon"), NULL, REG_SZ, tzTemp, _StrSize(tzTemp)); for (p = STR_ExtList; *p; p += lstrlen(p) + 1) { SHSetValue(HKEY_CLASSES_ROOT, p, NULL, REG_SZ, STR_AppName, sizeof(STR_AppName)); } } break; case IDM_Window_Cascade: SendMessage(CClientWnd::m_hWnd, WM_MDICASCADE, 0, 0); return; case IDM_Window_TitleHorz: SendMessage(CClientWnd::m_hWnd, WM_MDITILE, MDITILE_HORIZONTAL, 0); break; case IDM_Window_TitleVert: SendMessage(CClientWnd::m_hWnd, WM_MDITILE, MDITILE_VERTICAL, 0); break; case IDM_Window_ArrangeIcons: SendMessage(CClientWnd::m_hWnd, WM_MDIICONARRANGE, 0, 0); break; case IDM_Window_CloseAll: CClientWnd::CloseAll(); break; case IDM_Help_Content: // 查看帮助内容 GetModuleFileName(NULL, tzTemp, MAX_PATH); lstrcpy(_StrEnd(tzTemp) - _LenOf(EXT_Chm), EXT_Chm); if (ShellExecute(NULL, NULL, tzTemp, NULL, NULL, SW_SHOW) <= (HINSTANCE) 32) { ErrorBox(ERR_HelpErr); } break; case IDM_Help_Desktop: case IDM_Help_StartMenu: case IDM_Help_ProgramMenu: case IDM_Help_QuickLaunch: case IDM_Help_VisualStudio: // 创建或删除快捷方式 OnHelpShortcut(LOWORD(wParam)); break; case IDM_Help_About: // 显示关于对话框 CAboutDlg::Show(m_hWnd); break; case IDC_TrayIcon: // 系统托盘消息 if ((lParam == WM_LBUTTONUP) || (lParam == WM_RBUTTONUP)) { OnTrayIcon(FALSE); } break; default: pWnd = CClientWnd::GetChildWnd(); _ExIf(pWnd, pWnd->OnCommand(wParam, lParam)); } }