SDIメニューにチェックをいれるには

解決


勉強中  2003-12-11 13:45:07  No: 52836  IP: [192.*.*.*]

今VC++6、Windows2000でSDIのアプリを作成しています。

デフォルトで作成されるメニューに新しいメニューを作成したのですが
メニューアイテムのID作成しないもの(ポップアップメニューにしたため)
にチェックをいれることができないのですが、何か方法はないでしょうか?

よろしくおねがいします。

編集 削除
なーめ  2003-12-12 04:21:12  No: 52837  IP: [192.*.*.*]

>> ポップアップメニューにしたため
サブメニューのことですか?
ならば、一つ上、あるいは一つ下の
項目から、該当項目を指定して変更してやればよいのでは。
下の例では3番目の項目から2番目の項目を変更しています。
たとえば次のようにメニューが表示されていて、
----------
[TEST000 ]
[TEST001>]
[TEST002 ]

TEST001 にチェックをつけたいとき、
TEST002 の ON_UPDATE_COMMAND_UI ハンドラを追加。
pMenu が NULL のこともあるので注意。

void CMainFrame::OnUpdateTest002(CCmdUI* pCmdUI) 
{
  //  ON_UPDATE_COMMAND_UI
  CMenu * pMenu = pCmdUI->m_pMenu;
  if( pMenu )
  {
    pMenu->CheckMenuItem( 1, MF_BYPOSITION | MF_CHECKED );
  }
}

でも、全てポップアップだけのときはどうするんだろう。
ダミーでポップアップでない項目を入れておき、
その項目のON_UPDATE_COMMAND_UIでほかの項目に
チェックをつけ、その項目自身は削除するのかな。
やってみよう。

void CMainFrame::OnUpdateTest002(CCmdUI* pCmdUI) 
{
  //  ON_UPDATE_COMMAND_UI
  CMenu * pMenu = pCmdUI->m_pMenu;
  if( pMenu )
  {
    pMenu->CheckMenuItem( 1, MF_BYPOSITION | MF_CHECKED );
    pMenu->DeleteMenu( 2, MF_BYPOSITION );
  }
}

テストはうまくいきました。
これで、全てサブメニューでもチェックの操作ができます。

編集 削除
勉強中  2003-12-12 14:40:33  No: 52838  IP: [192.*.*.*]

詳細までほんとにありがとうございました!!

編集 削除