自前で値を保存していおいて、ポップアップメニュー表示時に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;
}ネタ元