右键菜单
void CChildView::OnContextMenu(CWnd* , CPoint point) { if (point.x == -1 && point.y == -1) { CRect rect; GetClientRect(rect); ClientToScreen(rect);
point = rect.TopLeft(); point.Offset(5, 5); }
CMenu menu; VERIFY(menu.LoadMenu(IDR_RMENU));
CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); CWnd* pWndPopupOwner = this;
while (pWndPopupOwner->GetStyle() & WS_CHILD) pWndPopupOwner = pWndPopupOwner->GetParent();
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner); }
|
显示,隐藏菜单
this->SetMenu(NULL); this->DrawMenuBar();
CMenu m_Menu; m_Menu.LoadMenuW(IDR_MENU1); SetMenu(&m_Menu); this->DrawMenuBar();
|
修改系统菜单
已经有代码了,直接添加自定义菜单就可以了。
需要在 Resource.h 里面手动添加一个菜单 ID #define IDM_SYSCOMMAND_CUSTOM 32771
别忘了修改一下下面的下一个可用 id 序号,
#ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 135 #define _APS_NEXT_COMMAND_VALUE 32772 #define _APS_NEXT_CONTROL_VALUE 1005 #define _APS_NEXT_SYMED_VALUE 104 #endif #endif
|
BOOL CMRLGaugerDlg::OnInitDialog() { CDialogEx::OnInitDialog(); ... CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != nullptr) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } pSysMenu->InsertMenuW(0,MF_CHECKED| MF_BYPOSITION, IDM_SYSCOMMAND_CUSTOM, _T("菜单栏"));
} ...
void CMRLGaugerDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); }else if (nID == IDM_SYSCOMMAND_CUSTOM) { if (MF_CHECKED == m_pSysMenu->GetMenuState(IDM_SYSCOMMAND_CUSTOM,MF_BYCOMMAND)) { m_pSysMenu->CheckMenuItem(IDM_SYSCOMMAND_CUSTOM, MF_UNCHECKED); } else { m_pSysMenu->CheckMenuItem(IDM_SYSCOMMAND_CUSTOM, MF_CHECKED); } } else { CDialogEx::OnSysCommand(nID, lParam); } }
|