最初から無効にする(これはRADの「無効」にチェックすればよい)のではなく、
途中から(例えばボタンを押したときに)無効にする、ということで
良いのでしょうか?
無効化するIDをIDM_Enable、その項目を含むメニューのハンドルをhMenuMainとすると
コード: 全て選択
Dim lpMenuInfo As MENUITEMINFO
Dim retAns As Long
'メニュー項目(IDM_Enable)を動的に無効化する。
lpMenuInfo.cbSize = Len( lpMenuInfo )
lpMenuInfo.fMask = MIIM_STATE
lpMenuInfo.fState = MFS_DISABLED
retAns = SetMenuItemInfo( hMenuMain, IDM_Enable, MF_BYCOMMAND, lpMenuInfo )
'SetMenuItemInfo()を使うと、メニューの内容(文字列)なども変更できる。
'要ヘルプ参照。
でできると思います。
・・・もっと簡単に、直に使用可/不可を変更できるEnableMenuItem()なんて関数もあるみたいです。
コード: 全て選択
'メニュー項目(IDM_Enable)を動的に無効化する。
EnableMenuItem( hMenuMain, IDM_Enable, MF_BYCOMMAND Or MF_GRAYED )
試してませんが、ヘルプに載ってました。
とここまで書いてから、RADではメニューハンドルなんぞは
明示的には扱わないのではないか、と疑問が浮かびました。
(RADではメニューの状態変更はやったことないので^^;)
いちいちCallback.wbpを調べるのもどうかと思うので・・・こんな方法を考えてみます。
下記のようなメニュー(IDをMainMenuとします)があったとします。
--------------------------------
ファイル(ID_F)-ヘルプ(ID_H)
+開く(ID_O) +バージョン情報(ID_V)
+保存(ID_S)
--------------------------------
ここで、サブメニューの相対位置は「開く」が0、「保存」が1です。
「開く」を指定する場合は
Dim hMenuMain As HMENU
hMenuMain = GetSubMenu( GetSubMenu(hMenu_ID_MainMenu, 0), 0 )
「保存」を指定する場合は
hMenuMain = GetSubMenu( GetSubMenu(hMenu_ID_MainMenu, 0), 1 )
「ファイル」を指定する場合は
hMenuMain = GetSubMenu(hMenu_ID_MainMenu, 0)
「ヘルプ」を指定する場合は
hMenuMain = GetSubMenu(hMenu_ID_MainMenu, 1)
「バージョン情報」を指定する場合は
hMenuMain = GetSubMenu( GetSubMenu(hMenu_ID_MainMenu, 1), 0 )
を“項目を含むメニューのハンドル”として指定してやれば、
良いのではないかと思います。
なお、hMenu_ID_MainMenuはRADが自動定義しているメニューの親ハンドルです。
うーん。コードがちょっと手間ですね(^^;)
もっと簡単な方法があるのかもしれません。
知ってる方いらっしゃいましたら、宜しくお願いします。