メニュー操作について – プログラミング – Home

通知
すべてクリア

[解決済] メニュー操作について


ケン
 ケン
(@ケン)
ゲスト
結合: 25年前
投稿: 40
Topic starter  

環境: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)にチェックを入れられることは確認したいのですが、プログ
ラム中でメニューを操作するにはどうすればよいのでしょうか?


引用未解決
トピックタグ
bun
 bun
(@bun)
ゲスト
結合: 24年前
投稿: 761
 

ちょっと説明がおかしいので指摘しておくと、

> CCmdUIを使用して
というのもプログラム中でメニューを操作していることにかわりありません。

で、回答ですが、メニューはビューではなくフレームに付随しています。
なので、
CMenu *cm =AfxGetMainWnd()->GetMenu();
cm->CheckMenuItem(ID_FILE_NEW, MF_BYCOMMAND | MF_CHECKED);
としてください。


返信引用
ケン
 ケン
(@ケン)
ゲスト
結合: 25年前
投稿: 40
Topic starter  

>bun様

ご指摘のように
CMenu *cm =AfxGetMainWnd()->GetMenu();
とすることで正しく動作しました。

ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました