タスクトレイ ポップアップルメニューに、レ点チェック項目を利用する

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

ネタ元