Wiki がページ「メニュー項目を無効にする(MFC)」を「MFCコントロール - メニュー」に、リダイレクトを残さずに移動しました
 
(2人の利用者による、間の4版が非表示)
1行目: 1行目:
== サンプルコード(メインメニュー項目の無効化) ==
== 概要 ==
  <source lang="c++">
 
<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;
  </source>
  </syntaxhighlight>
<br>
<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // CMainFrame.cpp
  // CMainFrame.cpp
  #include "stdafx.h"
  #include "stdafx.h"
75行目: 80行目:
     }
     }
  }
  }
   
  </syntaxhighlight>
   
<br>
  <syntaxhighlight lang="c++">
  // CMainFrame.h
  // CMainFrame.h
  #pragma once // VisualC++独自のプリプロセッサで二重インクルード防止
  #pragma once // VisualC++独自のプリプロセッサで二重インクルード防止
87行目: 93行目:
       CMainFrame();  // デフォルトコンストラクタ
       CMainFrame();  // デフォルトコンストラクタ
   
   
      void OnUpdateItem1(CCmdUI* pCmdUI);  // メニュー項目Item1_1のUI更新ハンドラ
       // メッセージマップ
       // メッセージマップ
       DECLARE_MESSAGE_MAP()  // メッセージマップの利用を宣言
       DECLARE_MESSAGE_MAP()  // メッセージマップの利用を宣言
      void OnUpdateItem1(CCmdUI* pCmdUI);  // メニュー項目Item1_1のUI更新ハンドラ
  };
  };
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


== サンプルコード(サブメニュー項目の無効化) ==
== サブメニュー項目の無効化 ==
  <source lang="c++">
以下の例では、TESTという名前のサブメニュー項目を検索して無効化している。<br>
  CWnd* pWnd     = AfxGetMainWnd();
<br>
  CMenu* pMenu    = pWnd->GetMenu();
サブメニュー項目はリソースIDを持っていないため、直接、無効化することができない。<br>
  int MenuCount = pMenu->GetMenuItemCount();
そのため、上位の<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 < SubMenuCount; i++)
  for(int i = 0; i < MenuCount; i++)
  {
  {
     CString strSubMenu;
     CString strSubMenu;
112行目: 123行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br>
サブメニュー項目はリソースIDを持っていないので、直接無効化することができない。<br>
上位のCMenuコントロールを用いて位置を指定して無効化する。<br>
<br>
上記のサンプルコードでは、TESTという名前の項目を検索して無効化している。<br>
また、下位の階層の項目を変更したい場合はpMenu->GetSubMenuで取得して、更に検索する。<br>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:MFC]]
[[カテゴリ:MFC]]