メニューの無効

[戻る]
ぴょん吉 [E-Mail] 2002/01/21(月) 13:11:47
はじめまして、VCの初心者なので申し訳ありませんが、よろしくお願いします。

アプリケーション起動時にファイルを検索してファイルが無ければ、
「ファイルを開く」ボタンおよび、メニューの[ファイル]>[ファイルを開く]を有効にし、
「印刷」ボタンおよび、メニューの[ファイル]>[印刷]を無効にしたいのですが、
ある本によりますと[UPDATE_COMMAND_UI]というメンバ関数を使用して行うとありました。
しかし、このメンバ関数を使用して制御するのではなく、[OnInitDialog]のメンバ関数内に各
ボタンおよびメニューの制御を行いたいのです。
実際、ボタンの制御は出来るのですが、メニューの制御が出来ません。
なにとぞ、皆様の良い知恵をお貸しください。よろしくお願いします。

追記:[UPDATE_COMMAND_UI]のメンバ関数内に下記の制御をやってみましたがうまくいきませ
んでした。
 if([フラグ判定]){
  pCmdUI->Enable(false);    // 無効
 }
 else{
  pCmdUI->Enable(true);     // 有効
 }

ぴょん吉 [E-Mail] 2002/01/21(月) 17:48:31
解決方法が見つかりました。

ClassWizardでメッセージ・ハンドラでメッセージ[WM_INITPOPUPMENU]を選択するとメッセー
ジ・ハンドラが作成されます。
下記参照
void CMMAPSDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
{
  CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);    
  // TODO: この位置にメッセージ ハンドラ用のコードを追加してください    
  
  // ------ここから追加
  if(ReadOK == 1){
    pPopupMenu->EnableMenuItem(ID_MENUITEM_FILEOPEN, MF_GRAYED);  // グレー表示
    pPopupMenu->EnableMenuItem(ID_MENUITEM_PRINT,    MF_ENABLED); // 有効にする
  }
  else{
    pPopupMenu->EnableMenuItem(ID_MENUITEM_FILEOPEN, MF_ENABLED); // 有効にする
    pPopupMenu->EnableMenuItem(ID_MENUITEM_PRINT,    MF_GRAYED);  // グレー表示
  }
  // ------ここまで追加
※ReadOKは読込時のフラグです。

ただし、ダイアログでの作成ですとメッセージ・ハンドラでメッセージ[WM_INITPOPUPMENU]が
ありません。
そこで、MFC ClassWizardのクラス情報タブのところにメッセージフィルタがあるので、
[ダイアログ]を[ウィンドウ]にすると、[WM_INITPOPUPMENU]のメッセージが表示され、
メッセージ・ハンドラを作成することが出来ます。
詳しくは、
<A HREF="http://www.bd.wakwak.com/~opapa/VC/Dialog/CommandHandler.htm">
のコマンドハンドラを参照してください。

追記:[過去のフォルダ一覧]の[200002]のらららさんが記述されているのですが、ダイアログ
形式だとこのメッセージがないので、解らなかったので、質問させていただくこととなりました
ことをお詫びします。

ぴょん吉 [E-Mail] 2002/01/21(月) 17:50:20
[[解決]]
すいません。
解決チェックを入れていませんでした。
あと、URLを記述するのに、タグが必要ないのですね。
改めてすいません。m(__)m

古いスレッドには追加発言できません。