📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== サンプルコード == <source lang="c++"> // CApp.cpp #include "CApp.h" // CApp_クラス #include "CMainFrame.h" // CMainFrameクラス #include "resource…」 |
細 Wiki がページ「メニュー項目を無効にする(MFC)」を「MFCコントロール - メニュー」に、リダイレクトを残さずに移動しました |
||
| (3人の利用者による、間の7版が非表示) | |||
| 1行目: | 1行目: | ||
== | == 概要 == | ||
< | |||
<br><br> | |||
== メインメニュー項目の無効化 == | |||
<syntaxhighlight lang="c++"> | |||
// CApp.cpp | // CApp.cpp | ||
#include "CApp.h" // CApp_クラス | #include "CApp.h" // CApp_クラス | ||
| 30行目: | 34行目: | ||
return TRUE; // 初期化成功ならTRUEを返す. | return TRUE; // 初期化成功ならTRUEを返す. | ||
} | } | ||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// CApp.h | // CApp.h | ||
#pragma once // VisualC++独自のプリプロセッサで二重インクルード防止 | #pragma once // VisualC++独自のプリプロセッサで二重インクルード防止 | ||
| 45行目: | 50行目: | ||
// アプリケーションインスタンスの宣言 | // アプリケーションインスタンスの宣言 | ||
CWinApp_ theApp; | CWinApp_ theApp; | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="c++"> | ||
// CMainFrame.cpp | // CMainFrame.cpp | ||
#include "stdafx.h" | #include "stdafx.h" | ||
| 64行目: | 69行目: | ||
// メニュー項目Item1のUI更新ハンドラ | // メニュー項目Item1のUI更新ハンドラ | ||
void CMainFrame::OnUpdateItem1(CCmdUI* pCmdUI) | void CMainFrame::OnUpdateItem1(CCmdUI* pCmdUI) | ||
{ | { | ||
// メニュー項目Item1のUI更新 | // メニュー項目Item1のUI更新 | ||
if(pCmdUI) | if(pCmdUI) | ||
{ | { // メニュー項目Item1の有効化 | ||
// | pCmdUI->Enable(TRUE); | ||
pCmdUI->Enable(); | } | ||
else | |||
{ // メニュー項目Item1の無効化 | |||
pCmdUI->Enable(FALSE); | |||
} | } | ||
} | } | ||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// CMainFrame.h | // CMainFrame.h | ||
#pragma once // VisualC++独自のプリプロセッサで二重インクルード防止 | #pragma once // VisualC++独自のプリプロセッサで二重インクルード防止 | ||
| 84行目: | 93行目: | ||
CMainFrame(); // デフォルトコンストラクタ | CMainFrame(); // デフォルトコンストラクタ | ||
// メッセージマップ | // メッセージマップ | ||
DECLARE_MESSAGE_MAP() // メッセージマップの利用を宣言 | DECLARE_MESSAGE_MAP() // メッセージマップの利用を宣言 | ||
void OnUpdateItem1(CCmdUI* pCmdUI); // メニュー項目Item1_1のUI更新ハンドラ | |||
}; | }; | ||
</ | </syntaxhighlight> | ||
<br><br> | |||
== サブメニュー項目の無効化 == | |||
以下の例では、TESTという名前のサブメニュー項目を検索して無効化している。<br> | |||
<br> | |||
サブメニュー項目はリソースIDを持っていないため、直接、無効化することができない。<br> | |||
そのため、上位の<code>CMenu</code>クラスから位置を指定して無効化する。<br> | |||
<br> | |||
また、さらに下位の階層の項目を無効化する場合は、<code>pMenu->GetSubMenu()</code>メソッドで取得して検索する。<br> | |||
<syntaxhighlight lang="c++"> | |||
CWnd* pWnd = ::AfxGetMainWnd(); | |||
CMenu* pMainMenu = pWnd->GetMenu(); | |||
int SubMenuCount = pMenu->GetMenuItemCount(); | |||
for(int i = 0; i < MenuCount; i++) | |||
{ | |||
CString strSubMenu; | |||
pMenu->GetMenuString(i, strSubMenu, MF_BYPOSITION); | |||
if(0 == strSubMenu.Compare(_T("TEST"))) | |||
{ | |||
pMenu->EnableMenuItem(i, MF_BYPOSITION | MF_DISABLED | MF_GRAYED); // 状態を設定する | |||
pWnd->DrawMenuBar(); | |||
} | |||
} | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:MFC]] | [[カテゴリ:MFC]] | ||