いつもお世話になっております、まかろにです。
ツリービューアイテムの右クリックで出るポップアップメニューの項目を
選択不可状態にしようとしていますが、うまくいきません。
ソースの方は
void COOOView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたは
デフォルトの処理を呼び出してください
CMainFrame *pFrame = (CMainFrame*)AfxGetApp() -> m_pMainWnd;
CTreeCtrl *pTree;
CMenu menu;
CMenu *pPopup;
pTree = &GetTreeCtrl();
{
// ここで押されたアイテム番号に応じた処理を入れる予定
}
// ポップアップメニュー読み込み
menu.LoadMenu(IDR_POPUP);
pPopup = menu.GetSubMenu(0);
ClientToScreen(&point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,
point.x, point.y, pFrame);
pPopup->EnableMenuItem(ID_MENUITEM_INIT,
MF_BYCOMMAND | MF_DISABLED | MF_GRAYED );
CTreeView::OnRButtonDown(nFlags, point);
}
void COOOView::OnMenuitemInit()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
}
となっています。
メニューに ”初期化” 項目を入れて、それを選択不可状態にしようとしています。
何か間違っているとか足りない部分があれば、ご指摘いただければと思います。
よろしくお願い致します。
<開発環境>
・Windows XP
・VC++ 6.0 MFC
TrackPopupMenu() はメニューを表示して選択されるまで制御を返しません。
ID_MENUITEM_INIT メニューの更新ハンドラを作って(ON_UPDATE_COMMAND_UI)、
そちらで Enable 制御してください。
なお、右クリックで表示されるメニュー(コンテキストメニュー)は、
WM_RBUTTONDOWN ではなく、WM_CONTEXTMENU で処理するのが定石です。
WM_CONTEXTMENU なら右クリックからだけでなく、
キーボードのアプリケーションキー(メニュー印のキー)からも
利用できるようになります。
アドバイスありがとうございます。
おかげさまでうまくいきました。
まだまだ勉強不足ですね、すいません。がんばります。
今後もよろしくお願いします。