環境:Visual C++6.0 WindowsXP SDI
ビューの関数内からメニューを操作することが上手くできません。
いろいろと検索したのですが、このような基本的なことで嵌っている人はいないようで
わかりませんでした。基本的な質問で恐縮ですがよろしくお願いします。
たとえば、下のように
void CxxxView::Onhoge(){
CMenu *cm =GetMenu();
cm->CheckMenuItem(ID_xxxx, MF_BYCOMMAND | MF_CHECKED);
}
という感じでメニュー(ID_xxxx)にチェックをいれるようなことをしたいのですが、
cm->CheckMenuItem(ID_xxxx, MF_BYCOMMAND | MF_CHECKED); のところでメモリエラー
となってしまいます。GetMenuでcmに値が入っていることは確認しましたがメンバ関数を
呼び出すとエラーとなってしまいます。
CCmdUIを使用して
void CxxxView::OnUpdateViewxxx(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(1);
}
とすればメニュー(ID_xxxx)にチェックを入れられることは確認したいのですが、プログ
ラム中でメニューを操作するにはどうすればよいのでしょうか?
ちょっと説明がおかしいので指摘しておくと、
> CCmdUIを使用して
というのもプログラム中でメニューを操作していることにかわりありません。
で、回答ですが、メニューはビューではなくフレームに付随しています。
なので、
CMenu *cm =AfxGetMainWnd()->GetMenu();
cm->CheckMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_CHECKED);
としてください。
>bun様
ご指摘のように
CMenu *cm =AfxGetMainWnd()->GetMenu();
とすることで正しく動作しました。
ありがとうございました。