自前で値を保存していおいて、ポップアップメニュー表示時にON/OFFや文字列を差し替える。
afx_msg LRESULT Hoge::OnUserPopup(WPARAM wParam, LPARAM lParam) { // カーソルの現在位置を取得 POINT point; ::GetCursorPos(&point); switch(lParam) { case WM_RBUTTONDOWN: SetForegroundWindow(); // この処理を忘れずに! CMenu menu; VERIFY(menu.LoadMenu(IDR_MENU_POPUP)); CMenu* pPopup = menu.GetSubMenu(0); ASSERT(pPopup != NULL); if( m_isExcec ){ pPopup->ModifyMenuW(ID_POPUP_RUN,MF_BYCOMMAND|MF_STRING,ID_POPUP_RUN,_T("実行中")); pPopup->CheckMenuItem(ID_POPUP_RUN,MF_CHECKED | MF_BYCOMMAND); }else{ pPopup->ModifyMenuW(ID_POPUP_RUN,MF_BYCOMMAND|MF_STRING,ID_POPUP_RUN,_T("一時停止中")); pPopup->CheckMenuItem(ID_POPUP_RUN,MF_UNCHECKED | MF_BYCOMMAND); } pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); PostMessage(WM_NULL); // この処理も忘れずに! break; } return 0; }
ネタ元