📄 mainfrm.cpp
字号:
m_dumbWnd.ShowWindow(SW_SHOW); if (m_view_timing) SetTimer(PROGRESS_TIMER, PROGRESS_REFRESH_MS, ProgressTimer); if (!app->m_scene_width || !app->m_scene_height) { m_wndView.SetWindowPos(this, 0, y, disp_w, disp_h, SWP_SHOWWINDOW); gf_term_set_size(app->m_term, disp_w, disp_h); return; } if (!app->m_fit_screen && (app->m_scene_width < disp_w) && (app->m_scene_height < disp_h)) { c_w = app->m_scene_width; c_h = app->m_scene_height; x = (disp_w - c_w) / 2; y = (disp_h - c_h) / 2; } else { c_w = disp_w; c_h = disp_h; } m_wndView.SetWindowPos(this, x, y, c_w, c_h, SWP_SHOWWINDOW | SWP_NOZORDER); gf_term_set_size(app->m_term, c_w, c_h);}void CMainFrame::OnViewFullscreen() { COsmo4 *app = GetApp(); if (!app->m_open) return; u32 disp_w = app->m_screen_width; u32 disp_h = app->m_screen_height; Bool is_full_screen = !m_full_screen; /*prevent resize messages*/ m_full_screen = 1; HWND hWnd = GetSafeHwnd(); ::SetForegroundWindow(hWnd); ::CommandBar_Show(m_wndCommandBar.GetSafeHwnd(), is_full_screen ? FALSE : TRUE); SHFullScreen(hWnd, SHFS_HIDESTARTICON | SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON); if (is_full_screen) { m_dumbWnd.ShowWindow(SW_HIDE); ::MoveWindow(m_hWnd, 0, 0, disp_w, disp_h, 0); m_wndView.GetWindowRect(&m_view_rc); m_wndView.SetWindowPos(this, 0, 0, disp_w, disp_h, SWP_NOZORDER); gf_term_set_option(app->m_term, GF_OPT_FULLSCREEN, is_full_screen); m_full_screen = 1; } else { gf_term_set_option(app->m_term, GF_OPT_FULLSCREEN, is_full_screen); m_full_screen = 0; OnSetSize(0,0); m_dumbWnd.ShowWindow(SW_SHOW); gf_term_set_option(app->m_term, GF_OPT_REFRESH, 0); }}void CMainFrame::OnUpdateViewFullscreen(CCmdUI* pCmdUI) { pCmdUI->Enable(GetApp()->m_open ? TRUE : FALSE);}LONG CMainFrame::OnSetSize(WPARAM wParam, LPARAM lParam){ RECT rc; if (m_full_screen) return 0; GetWindowRect(&rc); SetWindowPos(NULL, 0, 0, rc.right-rc.left, rc.bottom-rc.top, SWP_NOZORDER | SWP_NOMOVE); return 1; }LONG CMainFrame::Open(WPARAM wParam, LPARAM lParam){ COsmo4 *app = GetApp(); CloseURL(); char filename[5000]; CE_WideToChar((LPTSTR) (LPCTSTR) app->m_filename, filename); app->m_stoped = 0; if (app->m_reconnect_time) { gf_term_connect_from_time(app->m_term, filename, app->m_reconnect_time, 0); app->m_reconnect_time = 0; } else { gf_term_connect(app->m_term, filename); } app->SetBacklightState(1); return 1; }LONG CMainFrame::OnNavigate(WPARAM /*wParam*/, LPARAM /*lParam*/){ COsmo4 *app = GetApp(); char to_url[MAX_PATH]; CE_WideToChar((LPTSTR) (LPCTSTR) app->m_navigate_url, to_url); if (gf_term_is_supported_url(app->m_term, to_url, 1, app->m_no_mime_fetch)) { char fileName[MAX_PATH]; TCHAR w_to_url[MAX_PATH]; CE_WideToChar((LPTSTR) (LPCTSTR) app->m_filename, fileName); char *str = gf_url_concatenate(fileName, to_url); if (!str) str = strdup(to_url); CE_CharToWide(str, w_to_url); free(str); app->m_filename = w_to_url; Open(0, 0); } else { SHELLEXECUTEINFO info; console_message = app->m_navigate_url; console_err = GF_OK; PostMessage(WM_CONSOLEMSG); if (m_full_screen) { OnViewFullscreen(); app->ShowTaskBar(1); m_restore_fs = 1; } memset(&info, 0, sizeof(SHELLEXECUTEINFO)); info.cbSize = sizeof(SHELLEXECUTEINFO); info.lpVerb = L"open"; info.fMask = SEE_MASK_NOCLOSEPROCESS; info.lpFile = L"iexplore"; info.lpParameters = (LPCTSTR) app->m_navigate_url; info.nShow = SW_SHOWNORMAL; ShellExecuteEx(&info); } return 1; }void CMainFrame::OnFilePause(){ COsmo4 *app = GetApp(); if (app->m_stoped) { char filename[5000]; CE_WideToChar((LPTSTR) (LPCTSTR) app->m_filename, filename); app->m_stoped = 0; gf_term_connect(app->m_term, filename); app->SetBacklightState(1); if (m_view_timing) SetTimer(PROGRESS_TIMER, PROGRESS_REFRESH_MS, ProgressTimer); SetPauseButton(); } else { app->Pause(); }}void CMainFrame::OnUpdateFilePause(CCmdUI* pCmdUI){ COsmo4 *app = GetApp(); pCmdUI->Enable((app->m_open || app->m_stoped) ? TRUE : FALSE);}void CMainFrame::OnFileStop(){ COsmo4 *app = GetApp(); if (!app->m_open) return; if (m_full_screen) OnViewFullscreen(); app->m_stoped = 1; if (m_view_timing) KillTimer(PROGRESS_TIMER); gf_term_disconnect(app->m_term); m_progBar.SetPosition(0); app->SetBacklightState(0); SetPauseButton();}void CMainFrame::OnUpdateFileStop(CCmdUI* pCmdUI){ pCmdUI->Enable( GetApp()->m_open ? TRUE : FALSE);}void CMainFrame::OnFileStep(){ COsmo4 *app = GetApp(); gf_term_set_option(app->m_term, GF_OPT_PLAY_STATE, GF_STATE_STEP_PAUSE); app->SetBacklightState(0); SetPauseButton(1);}void CMainFrame::OnUpdateFileStep(CCmdUI* pCmdUI){ pCmdUI->Enable(GetApp()->m_open ? TRUE : FALSE);}void CMainFrame::OnClose() { PostMessage(WM_DESTROY);}LONG CMainFrame::OnSIPChange(WPARAM wParam, LPARAM lParam){ if (wParam == SPI_SETSIPINFO) GetApp()->ShowTaskBar(0); return 1;}void CMainFrame::OnViewFit() { COsmo4 *app = GetApp(); app->m_fit_screen = !app->m_fit_screen; if (app->m_open) OnSetSize(0, 0);}void CMainFrame::OnUpdateViewFit(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetApp()->m_fit_screen ? TRUE : FALSE);}void CMainFrame::OnViewArOrig() { gf_term_set_option(GetApp()->m_term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_KEEP); }void CMainFrame::OnViewArFill() { gf_term_set_option(GetApp()->m_term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_FILL_SCREEN); }void CMainFrame::OnViewAr43() { gf_term_set_option(GetApp()->m_term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_4_3); }void CMainFrame::OnViewAr169() { gf_term_set_option(GetApp()->m_term, GF_OPT_ASPECT_RATIO, GF_ASPECT_RATIO_16_9); }void CMainFrame::OnNavNone() { gf_term_set_option(GetApp()->m_term, GF_OPT_NAVIGATION, GF_NAVIGATE_NONE);}void CMainFrame::OnNavSlide() { gf_term_set_option(GetApp()->m_term, GF_OPT_NAVIGATION, GF_NAVIGATE_SLIDE);}void CMainFrame::OnNaveReset() { gf_term_set_option(GetApp()->m_term, GF_OPT_NAVIGATION_TYPE, 0);}void CMainFrame::ForwardMessage(){ const MSG *msg = GetCurrentMessage(); m_wndView.SendMessage(msg->message, msg->wParam, msg->lParam);}void CMainFrame::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags){ ForwardMessage(); }void CMainFrame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags){ ForwardMessage(); }void CMainFrame::OnViewTiming() { if (m_full_screen) return; if (m_view_timing) KillTimer(PROGRESS_TIMER); m_view_timing = !m_view_timing; OnSetSize(0, 0);}void CMainFrame::OnUpdateViewTiming(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_view_timing ? TRUE : FALSE);}void CMainFrame::OnSetNavigation(UINT nID) { gf_term_set_option(GetApp()->m_term, GF_OPT_NAVIGATION, nID - ID_NAV_NONE);}void CMainFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) { COsmo4 *app = GetApp(); CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu); u32 opt = gf_term_get_option(GetApp()->m_term, GF_OPT_ASPECT_RATIO); CheckMenuItem(pPopupMenu->m_hMenu, ID_VIEW_AR_ORIG, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_KEEP) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(pPopupMenu->m_hMenu, ID_VIEW_AR_FILL, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_FILL_SCREEN) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(pPopupMenu->m_hMenu, ID_VIEW_AR_43, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_4_3) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(pPopupMenu->m_hMenu, ID_VIEW_AR_169, MF_BYCOMMAND| (opt==GF_ASPECT_RATIO_16_9) ? MF_CHECKED : MF_UNCHECKED); CheckMenuItem(pPopupMenu->m_hMenu, ID_VIEW_FIT, MF_BYCOMMAND| app->m_fit_screen ? MF_CHECKED : MF_UNCHECKED); u32 type; if (!app->m_open) type = GF_NAVIGATE_TYPE_NONE; else type = gf_term_get_option(app->m_term, GF_OPT_NAVIGATION_TYPE); EnableMenuItem(pPopupMenu->m_hMenu, ID_NAV_NONE, MF_BYCOMMAND | ((type==GF_NAVIGATE_TYPE_NONE) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_NAV_SLIDE, MF_BYCOMMAND | ((type==GF_NAVIGATE_TYPE_NONE) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_NAV_RESET, MF_BYCOMMAND | ((type==GF_NAVIGATE_TYPE_NONE) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_NAV_WALK, MF_BYCOMMAND | ( (type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_NAV_FLY, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_NAV_EXAMINE, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_COLLIDE_OFF, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_COLLIDE_REG, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_COLLIDE_DISP, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); EnableMenuItem(pPopupMenu->m_hMenu, ID_NAV_GRAVITY, MF_BYCOMMAND | ((type!=GF_NAVIGATE_TYPE_3D) ? MF_GRAYED : MF_ENABLED) ); if (type==GF_NAVIGATE_TYPE_NONE) { u32 mode = gf_term_get_option(app->m_term, GF_OPT_NAVIGATION); CheckMenuItem(pPopupMenu->m_hMenu, ID_NAV_NONE, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_NONE) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem(pPopupMenu->m_hMenu, ID_NAV_SLIDE, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_SLIDE) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem(pPopupMenu->m_hMenu, ID_NAV_WALK, MF_BYCOMMAND | ( (mode==GF_NAVIGATE_WALK) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem(pPopupMenu->m_hMenu, ID_NAV_FLY, MF_BYCOMMAND | ((mode==GF_NAVIGATE_FLY) ? MF_CHECKED : MF_UNCHECKED) ); CheckMenuItem(pPopupMenu->m_hMenu, ID_NAV_EXAMINE, MF_BYCOMMAND | ((mode==GF_NAVIGATE_EXAMINE) ? MF_CHECKED : MF_UNCHECKED) ); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -