
環境はVisual C++ .netでリソースで作ったメニューをCMainFrameクラスで表示しないようにしようとしたのですが、なぜか選択できないグレー表示になってしまいます。気持ち悪いので、どなたかご存知の方教えていただけると嬉しいのですが。
CMainFrame::CMainFrame()
{
CMenu *pMainMenu;
CMenu *pSubMenu;
pMainMenu = GetMenu();
pSubMenu->RemoveMenu(ID_SELECT_DATA_FOLDER, MF_BYCOMMAND);
DrawMenuBar();
}
void CMainFrame::OnUpdateSelectDataFolder(CCmdUI *pCmdUI)
{
// TODO : ここにコマンド更新 UI ハンドラ コードを追加します。
pCmdUI->Enable(false);
}
No.2ベストアンサー
- 回答日時:
ウインドウが作成されてから削除するのではなく、リソースエディタで削除してしまった方が楽だと思います。
pCmdUI->Enable(false);
は削除するコマンドではなく、灰色にするコマンドです。
CMainFrame::OnCreate()
ここでRemoveMenuをすれば該当するメニューが削除されます。削除されるのはメインフレームのメニューです。
MDIなどでは子ウインドウがある場合は子ウインドウ(子フレーム)のメニューが表示されるので削除されていないように見えるのかもしれません。
子ウインドウのメニューをいじるにはいくつか方法があります。簡単な方法としては
CChildFrame::OnUpdateFrameMenu()
でGetParentFrame()->GetMenu()に対してRemoveMenuをかければ削除できます。
No.1
- 回答日時:
>CMenu *pMainMenu;
>CMenu *pSubMenu;
>pMainMenu = GetMenu();
>pSubMenu->RemoveMenu(ID_SELECT_DATA_FOLDER, >MF_BYCOMMAND);
本当にこれで動いてますか?
pSubMenuの値が不定にしか見えないんですけど。
あと、GetMenuをCMainFrameのコンストラクタで呼んでもだめです。ウィンドウが生成された後に呼ばないと意味がありません。なんで、メニュー項目を削除するタイミングはOnCreateがいいんではないでしょうか?
この回答への補足
アドバイスありがとうございます。
失礼しました。メニュー項目の削除はコンストラクタではなく、OnCreate内で定義しておりました。メニューは(選択不可の)グレー表示になっておりますが、実際に動いております。
念のために関連する個所をすべて引用しました。どうぞよろしくお願いします。
[MainFrm.cpp]
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CMenu *pMainMenu;
CMenu *pSubMenu;
pMainMenu = GetMenu();
pSubMenu = pMainMenu->GetSubMenu(1);
pSubMenu->RemoveMenu(ID_SELECT_DATA_FOLDER, MF_BYCOMMAND);
DrawMenuBar();
}
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
//省略
ON_UPDATE_COMMAND_UI(ID_SELECT_DATA_FOLDER, OnUpdateSelectDataFolder)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
[MainFrm.h]
protected:
//{{AFX_MSG(CMainFrame)
afx_msg void OnUpdateSelectDataFolder(CCmdUI *pCmdUI);
//}}AFX_MSG
//
DECLARE_MESSAGE_MAP()
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/06/19 10:08
- Excel(エクセル) [クイックアクセスツールバー]の設定ファイルの格納場所について、 5 2023/04/21 14:43
- その他(Microsoft Office) ワードのマクロについて教えてください。 1 2023/01/21 16:01
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- gooブログ ブログの記事を書きだしのみに表示したい 1 2022/06/25 19:11
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Excel(エクセル) 【マクロ】リボン、行列、数式・ステータスバを非表示に 4 2022/12/12 07:32
- Excel(エクセル) Excelでnullになるような式のセルをマクロで空白行と認識させるにはどうすればいいですか? 3 2023/03/13 13:42
このQ&Aを見た人はこんなQ&Aも見ています
-
ビジュアルC++でボタンの有効/無効
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法
C言語・C++・C#
-
-
4
画面を強制的に再描画させる方法
C言語・C++・C#
-
5
CStringのFindで文字列検索を行いたいのですが
C言語・C++・C#
-
6
MFC ダイアログ上のID取得について
C言語・C++・C#
-
7
MFCのCListCtrlでスクロールを検出
C言語・C++・C#
-
8
MFCでbitmapを背景にしてstaticテキストを透過させる方法
C言語・C++・C#
-
9
リソースの編集ができません。リソースビューが開かない
C言語・C++・C#
-
10
エディットボックスの入力制限について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サブルーチンを使った再帰的な...
-
c言語
-
C#でTreeViewのCheckBoxのサイ...
-
パソコン
-
C言語について。
-
visual studio 2022でのC#プロ...
-
Python、プログラミングについ...
-
C言語 列挙型(enum型)変数について
-
ArduinoでMouse関数を使用して...
-
gccを行ってもexeファイルが生...
-
VisualStudioでC++クラスを追加...
-
C言語でファクト関数を使わずに...
-
【C言語】全角文字の配列を、全...
-
DNCL(共テ用プログラミング言語...
-
あんまり考えたくないけど
-
次の日本語の意味を教えて下さい
-
c言語
-
Notepad++の関数リスト表示でC...
-
MACで動く実行ファイルをWindow...
-
パイソンの
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
投稿記事を論理削除2
-
ページ番号を削除できない!
-
メニューをグレー表示でなく非...
-
VBA実行後、キー入力ができない
-
もう一回質問 3DSを売ります。 ...
-
質問箱で通知たまってるのに、...
-
ASUSのLive Updateの削除方法
-
二つのヤフーメールを一つにしたい
-
2chで間違えて自分の個人情...
-
clientmqueueに溜まったキュー...
-
Excel vba 重複削除、連番に並...
-
このQ&Aサイトでは、管理者から...
-
わたしの顔評価してー!くださ...
-
教えてgooでは、質問が運営から...
-
Yahoo! Japan ID
-
ヤフーIDの削除
-
hotmail の連絡先を完全に削除...
-
Cookieは定期的に削除するべき...
-
自分のした質問の消し方ってど...
-
回答を下さった方には大変失礼...
おすすめ情報