// 这段 MFC 示例源代码演示如何使用 MFC Microsoft Office Fluent 用户界面 // (“Fluent UI”)。该示例仅供参考, // 用以补充《Microsoft 基础类参考》和 // MFC C++ 库软件随附的相关电子文档。 // 复制、使用或分发 Fluent UI 的许可条款是单独提供的。 // 若要了解有关 Fluent UI 许可计划的详细信息,请访问 // https://go.microsoft.com/fwlink/?LinkId=238214. // // 版权所有(C) Microsoft Corporation // 保留所有权利。 // MainFrm.cpp: CMainFrame 类的实现 // #include "stdafx.h" #include "framework.h" #include "VideoCapture.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #endif #if USE_TRAYICON #define WM_MY_TRAY_NOTIFICATION WM_USER + 108 const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("UB530")); #endif // CMainFrame IMPLEMENT_DYNCREATE(CMainFrame, CFrameWndEx) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWndEx) ON_WM_CREATE() ON_COMMAND_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnApplicationLook) ON_UPDATE_COMMAND_UI_RANGE(ID_VIEW_APPLOOK_WIN_2000, ID_VIEW_APPLOOK_WINDOWS_7, &CMainFrame::OnUpdateApplicationLook) ON_COMMAND(ID_VIEW_CAPTION_BAR, &CMainFrame::OnViewCaptionBar) ON_UPDATE_COMMAND_UI(ID_VIEW_CAPTION_BAR, &CMainFrame::OnUpdateViewCaptionBar) ON_COMMAND(ID_TOOLS_OPTIONS, &CMainFrame::OnOptions) ON_COMMAND(ID_FILE_PRINT, &CMainFrame::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, &CMainFrame::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CMainFrame::OnFilePrintPreview) ON_UPDATE_COMMAND_UI(ID_FILE_PRINT_PREVIEW, &CMainFrame::OnUpdateFilePrintPreview) #if USE_TRAYICON ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification) ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, OnTaskBarCreated) #endif ON_WM_SETTINGCHANGE() ON_COMMAND(ID_TRAYMENU_EXIT, &CMainFrame::OnTraymenuExit) ON_MESSAGE(MSG_STATUS_BAR, &CMainFrame::OnMsgStatusBar) ON_WM_CLOSE() ON_WM_GETMINMAXINFO() END_MESSAGE_MAP() // CMainFrame 构造/析构 CMainFrame::CMainFrame() noexcept :m_trayIcon(IDR_MAINFRAME) { // TODO: 在此添加成员初始化代码 theApp.m_nAppLook = theApp.GetInt(_T("ApplicationLook"), ID_VIEW_APPLOOK_VS_2008); #if USE_TRAYICON m_isNotify = TRUE; m_bNoticeTray = TRUE; #endif } CMainFrame::~CMainFrame() { } #if USE_TRAYICON void CMainFrame::InitTrayIcon() { m_trayIcon.SetNotificationWnd(this, WM_MY_TRAY_NOTIFICATION); m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530")); m_trayIcon.SetIconInfos(IDR_MAINFRAME, IDR_MAINFRAME, IDR_MAINFRAME); m_trayIcon.SetDefaultTip(_T("UB530")); } LRESULT CMainFrame::OnTaskBarCreated(WPARAM wp, LPARAM lp) { Shell_NotifyIcon(NIM_ADD, &m_trayIcon.m_nid); return 0; } // Handle notification from tray icon: display a message. LRESULT CMainFrame::OnTrayNotification(WPARAM uID, LPARAM lEvent) { if (m_isNotify) { static LPCSTR MouseMessages[] = { "WM_MOUSEMOVE", "WM_LBUTTONDOWN", "WM_LBUTTONUP", "WM_LBUTTONDBLCLK", "WM_RBUTTONDOWN", "WM_RBUTTONUP", "WM_RBUTTONDBLCLK", "WM_MBUTTONDOWN", "WM_MBUTTONUP", "WM_MBUTTONDBLCLK" }; } if (uID != IDR_MAINFRAME) return m_trayIcon.OnTrayNotification(uID, lEvent); switch (lEvent) { case WM_RBUTTONUP: TrayRight(); break; case WM_LBUTTONUP: break; case WM_LBUTTONDBLCLK: TaskNotifyIcon(); break; default: break; } return 0; } void CMainFrame::TrayRight() { CMenu menu; if (!menu.LoadMenu(IDR_MAINFRAME)) return; CMenu* pSubMenu = menu.GetSubMenu(4); if (!pSubMenu) return; CPoint point; GetCursorPos(&point); ::SetForegroundWindow(m_hWnd); pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); } void CMainFrame::TaskNotifyIcon() { if (!m_bNoticeTray) { m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序")); ShowWindow(SW_SHOWNORMAL); m_bNoticeTray = TRUE; } else { m_trayIcon.SetIcon(IDR_MAINFRAME, _T("UB530采集程序")); ShowWindow(SW_HIDE); m_bNoticeTray = FALSE; } } #endif int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWndEx::OnCreate(lpCreateStruct) == -1) return -1; #if USE_TRAYICON InitTrayIcon(); #endif BOOL bNameValid; m_wndRibbonBar.Create(this); m_wndRibbonBar.LoadFromResource(IDR_RIBBON); #if !__QUICKACCESS_COMMAND__ // 添加以下代码段,禁用快速启动栏; CMFCRibbonQuickAccessToolBar* pQAToolbar = m_wndRibbonBar.GetQuickAccessToolbar(); pQAToolbar->RemoveAll(); #endif if (!m_wndStatusBar.Create(this)) { TRACE0("未能创建状态栏\n"); return -1; // 未能创建 } CString strTitlePane1; CString strTitlePane2; bNameValid = strTitlePane1.LoadString(IDS_STATUS_PANE1); ASSERT(bNameValid); bNameValid = strTitlePane2.LoadString(IDS_STATUS_PANE2); ASSERT(bNameValid); m_wndStatusBar.AddElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE1, strTitlePane1, TRUE), strTitlePane1); m_wndStatusBar.AddExtendedElement(new CMFCRibbonStatusBarPane(ID_STATUSBAR_PANE2, strTitlePane2, TRUE), strTitlePane2); // 启用 Visual Studio 2005 样式停靠窗口行为 CDockingManager::SetDockingMode(DT_SMART); // 启用 Visual Studio 2005 样式停靠窗口自动隐藏行为 EnableAutoHidePanes(CBRS_ALIGN_ANY); #if __OUTLOOKBAR__ // 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠: EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT); // 创建并设置“Outlook”导航栏: if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndTree, m_wndCalendar, 250)) { TRACE0("未能创建导航窗格\n"); return -1; // 未能创建 } #endif #if __CAPTIONBAR__ // 创建标题栏: if (!CreateCaptionBar()) { TRACE0("未能创建标题栏\n"); return -1; // 未能创建 } #endif #if __OUTLOOKBAR__ // 已创建 Outlook 栏,应允许在左侧停靠。 EnableDocking(CBRS_ALIGN_LEFT); EnableAutoHidePanes(CBRS_ALIGN_RIGHT); #endif // 加载菜单项图像(不在任何标准工具栏上): CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0); #if __DOCKINGBAR__ // 创建停靠窗口 if (!CreateDockingWindows()) { TRACE0("未能创建停靠窗口\n"); return -1; } #if __FC_WIN__ m_wndFileView.EnableDocking(CBRS_ALIGN_ANY); m_wndClassView.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndFileView); #endif #if __FC_WIN__ CDockablePane* pTabbedBar = nullptr; m_wndClassView.AttachToTabWnd(&m_wndFileView, DM_SHOW, TRUE, &pTabbedBar); #endif #if __OUT_PUT_WIN__ m_wndOutput.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndOutput); #endif m_wndIRControl.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndIRControl); #endif // 基于持久值设置视觉管理器和样式 OnApplicationLook(theApp.m_nAppLook); return 0; } BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWndEx::PreCreateWindow(cs) ) return FALSE; // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 //不把子框架标题添加到主框架标题(主框架中就不会再处理WM_SETTEXT消息) cs.style &= ~FWS_ADDTOTITLE; cs.cx = 640; cs.cy = 480; return TRUE; } #if __DOCKINGBAR__ BOOL CMainFrame::CreateDockingWindows() { BOOL bNameValid; #if __FC_WIN__ // 创建类视图 CString strClassView; bNameValid = strClassView.LoadString(IDS_CLASS_VIEW); ASSERT(bNameValid); if (!m_wndClassView.Create(strClassView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_CLASSVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)) { TRACE0("未能创建“类视图”窗口\n"); return FALSE; // 未能创建 } // 创建文件视图 CString strFileView; bNameValid = strFileView.LoadString(IDS_FILE_VIEW); ASSERT(bNameValid); if (!m_wndFileView.Create(strFileView, this, CRect(0, 0, 200, 200), TRUE, ID_VIEW_FILEVIEW, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT| CBRS_FLOAT_MULTI)) { TRACE0("未能创建“文件视图”窗口\n"); return FALSE; // 未能创建 } #endif #if __OUT_PUT_WIN__ // 创建输出窗口 CString strOutputWnd; bNameValid = strOutputWnd.LoadString(IDS_OUTPUT_WND); ASSERT(bNameValid); if (!m_wndOutput.Create(strOutputWnd, this, CRect(0, 0, 100, 100), TRUE, ID_VIEW_OUTPUTWND, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)) { TRACE0("未能创建输出窗口\n"); return FALSE; // 未能创建 } #endif // 创建遥控器窗口 CString strPropertiesWnd = _T("遥控器"); if (!m_wndIRControl.Create(strPropertiesWnd, this, CRect(0, 0, 230, 350), TRUE, ID_VIEW_PROPERTIESWND, WS_CHILD | WS_VISIBLE | /*WS_VSCROLL |*/ WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI )) { TRACE0("未能创建“遥控器”窗口\n"); return FALSE; // 未能创建 } SetDockingWindowIcons(theApp.m_bHiColorIcons); return TRUE; } void CMainFrame::SetDockingWindowIcons(BOOL bHiColorIcons) { #if __FC_WIN__ HICON hFileViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_FILE_VIEW_HC : IDI_FILE_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0); m_wndFileView.SetIcon(hFileViewIcon, FALSE); HICON hClassViewIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_CLASS_VIEW_HC : IDI_CLASS_VIEW), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0); m_wndClassView.SetIcon(hClassViewIcon, FALSE); #endif #if __OUT_PUT_WIN__ HICON hOutputBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_OUTPUT_WND_HC : IDI_OUTPUT_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0); m_wndOutput.SetIcon(hOutputBarIcon, FALSE); #endif HICON hPropertiesBarIcon = (HICON) ::LoadImage(::AfxGetResourceHandle(), MAKEINTRESOURCE(bHiColorIcons ? IDI_PROPERTIES_WND_HC : IDI_PROPERTIES_WND), IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), 0); m_wndIRControl.SetIcon(hPropertiesBarIcon, FALSE); } #endif #if __OUTLOOKBAR__ BOOL CMainFrame::CreateOutlookBar(CMFCOutlookBar& bar, UINT uiID, CMFCShellTreeCtrl& tree, CCalendarBar& calendar, int nInitialWidth) { bar.SetMode2003(); BOOL bNameValid; CString strTemp; bNameValid = strTemp.LoadString(IDS_SHORTCUTS); ASSERT(bNameValid); if (!bar.Create(strTemp, this, CRect(0, 0, nInitialWidth, 32000), uiID, WS_CHILD | WS_VISIBLE | CBRS_LEFT)) { return FALSE; // 未能创建 } CMFCOutlookBarTabCtrl* pOutlookBar = (CMFCOutlookBarTabCtrl*)bar.GetUnderlyingWindow(); if (pOutlookBar == nullptr) { ASSERT(FALSE); return FALSE; } pOutlookBar->EnableInPlaceEdit(TRUE); static UINT uiPageID = 1; // 可浮动,可自动隐藏,可调整大小,但不能关闭 DWORD dwStyle = AFX_CBRS_FLOAT | AFX_CBRS_AUTOHIDE | AFX_CBRS_RESIZE; CRect rectDummy(0, 0, 0, 0); const DWORD dwTreeStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS; tree.Create(dwTreeStyle, rectDummy, &bar, 1200); bNameValid = strTemp.LoadString(IDS_FOLDERS); ASSERT(bNameValid); pOutlookBar->AddControl(&tree, strTemp, 2, TRUE, dwStyle); calendar.Create(rectDummy, &bar, 1201); bNameValid = strTemp.LoadString(IDS_CALENDAR); ASSERT(bNameValid); pOutlookBar->AddControl(&calendar, strTemp, 3, TRUE, dwStyle); bar.SetPaneStyle(bar.GetPaneStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); pOutlookBar->SetImageList(theApp.m_bHiColorIcons ? IDB_PAGES_HC : IDB_PAGES, 24); pOutlookBar->SetToolbarImageList(theApp.m_bHiColorIcons ? IDB_PAGES_SMALL_HC : IDB_PAGES_SMALL, 16); pOutlookBar->RecalcLayout(); BOOL bAnimation = theApp.GetInt(_T("OutlookAnimation"), TRUE); CMFCOutlookBarTabCtrl::EnableAnimation(bAnimation); bar.SetButtonsFont(&afxGlobalData.fontBold); // bar.ShowCaret(); // bar.ShowOwnedPopups(); // bar.ShowPane(TRUE, FALSE, TRUE); // // bar.ShowWindow(SW_SHOW); return TRUE; } #endif #if __CAPTIONBAR__ BOOL CMainFrame::CreateCaptionBar() { if (!m_wndCaptionBar.Create(WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS, this, ID_VIEW_CAPTION_BAR, -1, TRUE)) { TRACE0("未能创建标题栏\n"); return FALSE; } BOOL bNameValid; CString strTemp, strTemp2; bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON); ASSERT(bNameValid); m_wndCaptionBar.SetButton(strTemp, ID_TOOLS_OPTIONS, CMFCCaptionBar::ALIGN_LEFT, FALSE); bNameValid = strTemp.LoadString(IDS_CAPTION_BUTTON_TIP); ASSERT(bNameValid); m_wndCaptionBar.SetButtonToolTip(strTemp); bNameValid = strTemp.LoadString(IDS_CAPTION_TEXT); ASSERT(bNameValid); m_wndCaptionBar.SetText(strTemp, CMFCCaptionBar::ALIGN_LEFT); m_wndCaptionBar.SetBitmap(IDB_INFO, RGB(255, 255, 255), FALSE, CMFCCaptionBar::ALIGN_LEFT); bNameValid = strTemp.LoadString(IDS_CAPTION_IMAGE_TIP); ASSERT(bNameValid); bNameValid = strTemp2.LoadString(IDS_CAPTION_IMAGE_TEXT); ASSERT(bNameValid); m_wndCaptionBar.SetImageToolTip(strTemp, strTemp2); return TRUE; } #endif // CMainFrame 诊断 #ifdef _DEBUG void CMainFrame::AssertValid() const { CFrameWndEx::AssertValid(); } void CMainFrame::Dump(CDumpContext& dc) const { CFrameWndEx::Dump(dc); } #endif //_DEBUG // CMainFrame 消息处理程序 void CMainFrame::OnApplicationLook(UINT id) { CWaitCursor wait; theApp.m_nAppLook = id; switch (theApp.m_nAppLook) { case ID_VIEW_APPLOOK_WIN_2000: CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManager)); m_wndRibbonBar.SetWindows7Look(FALSE); break; case ID_VIEW_APPLOOK_OFF_XP: CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOfficeXP)); m_wndRibbonBar.SetWindows7Look(FALSE); break; case ID_VIEW_APPLOOK_WIN_XP: CMFCVisualManagerWindows::m_b3DTabsXPTheme = TRUE; CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows)); m_wndRibbonBar.SetWindows7Look(FALSE); break; case ID_VIEW_APPLOOK_OFF_2003: CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2003)); CDockingManager::SetDockingMode(DT_SMART); m_wndRibbonBar.SetWindows7Look(FALSE); break; case ID_VIEW_APPLOOK_VS_2005: CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2005)); CDockingManager::SetDockingMode(DT_SMART); m_wndRibbonBar.SetWindows7Look(FALSE); break; case ID_VIEW_APPLOOK_VS_2008: CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerVS2008)); CDockingManager::SetDockingMode(DT_SMART); m_wndRibbonBar.SetWindows7Look(FALSE); break; case ID_VIEW_APPLOOK_WINDOWS_7: CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows7)); CDockingManager::SetDockingMode(DT_SMART); m_wndRibbonBar.SetWindows7Look(TRUE); break; default: switch (theApp.m_nAppLook) { case ID_VIEW_APPLOOK_OFF_2007_BLUE: CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_LunaBlue); break; case ID_VIEW_APPLOOK_OFF_2007_BLACK: CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_ObsidianBlack); break; case ID_VIEW_APPLOOK_OFF_2007_SILVER: CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Silver); break; case ID_VIEW_APPLOOK_OFF_2007_AQUA: CMFCVisualManagerOffice2007::SetStyle(CMFCVisualManagerOffice2007::Office2007_Aqua); break; } CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerOffice2007)); CDockingManager::SetDockingMode(DT_SMART); m_wndRibbonBar.SetWindows7Look(FALSE); } #if __DOCKINGBAR__ #if __OUT_PUT_WIN__ m_wndOutput.UpdateFonts(); #endif #endif RedrawWindow(nullptr, nullptr, RDW_ALLCHILDREN | RDW_INVALIDATE | RDW_UPDATENOW | RDW_FRAME | RDW_ERASE); theApp.WriteInt(_T("ApplicationLook"), theApp.m_nAppLook); } void CMainFrame::OnUpdateApplicationLook(CCmdUI* pCmdUI) { pCmdUI->SetRadio(theApp.m_nAppLook == pCmdUI->m_nID); } void CMainFrame::OnViewCaptionBar() { #if __CAPTIONBAR__ m_wndCaptionBar.ShowWindow(m_wndCaptionBar.IsVisible() ? SW_HIDE : SW_SHOW); RecalcLayout(FALSE); #endif } void CMainFrame::OnUpdateViewCaptionBar(CCmdUI* pCmdUI) { #if __CAPTIONBAR__ pCmdUI->SetCheck(m_wndCaptionBar.IsVisible()); #endif } void CMainFrame::OnOptions() { CMFCRibbonCustomizeDialog *pOptionsDlg = new CMFCRibbonCustomizeDialog(this, &m_wndRibbonBar); ASSERT(pOptionsDlg != nullptr); pOptionsDlg->DoModal(); delete pOptionsDlg; } void CMainFrame::OnFilePrint() { if (IsPrintPreview()) { PostMessage(WM_COMMAND, AFX_ID_PREVIEW_PRINT); } } void CMainFrame::OnFilePrintPreview() { if (IsPrintPreview()) { PostMessage(WM_COMMAND, AFX_ID_PREVIEW_CLOSE); // 强制关闭“打印预览”模式 } } void CMainFrame::OnUpdateFilePrintPreview(CCmdUI* pCmdUI) { pCmdUI->SetCheck(IsPrintPreview()); } void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection) { CFrameWndEx::OnSettingChange(uFlags, lpszSection); #if __DOCKINGBAR__ #if __OUT_PUT_WIN__ m_wndOutput.UpdateFonts(); #endif #endif } LRESULT CMainFrame::OnMsgStatusBar(WPARAM wParam, LPARAM lParam) { CString strMSG = *(CString*)wParam; int uId = lParam; SetRibbonStatusBarText(strMSG, uId); return LRESULT(); } BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 static BOOL bTopWnd = FALSE; if (pMsg->message == WM_KEYDOWN) { switch (pMsg->wParam) { case VK_F3: if (bTopWnd == FALSE) { SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//窗口置顶 SetWindowText(_T("视频采集卡-前置窗口(请按F3取消或开启前置)")); } else { SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);//取消窗口置顶 SetWindowText(_T("视频采集卡-取消前置(请按F3取消或开启前置)")); } bTopWnd = !bTopWnd; break; default: break; } } return CFrameWndEx::PreTranslateMessage(pMsg); } void CMainFrame::OnTraymenuExit() { // TODO: 在此添加命令处理程序代码 //GetActiveView(); CFrameWnd::OnClose(); } void CMainFrame::OnClose() { // TODO: 在此添加消息处理程序代码和/或调用默认值 #ifndef _DEBUG ShowWindow(SW_HIDE); m_bNoticeTray = FALSE; #else CFrameWnd::OnClose(); #endif } void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI) { // TODO: 在此添加消息处理程序代码和/或调用默认值 // lpMMI->ptMinTrackSize.x = 640; // lpMMI->ptMinTrackSize.y = 480; //lpMMI->ptMinTrackSize.x = 860; //lpMMI->ptMinTrackSize.y = 830; CFrameWndEx::OnGetMinMaxInfo(lpMMI); }