[表示]−[ツールバー]で実行される処理は?

[戻る]
もも 2002/12/05(木) 14:15:34
環境は、WindowsXP VC++6.0(MFC使用)
Application Wizardで、MDIアプリを作成しました。

メニューの[表示]−[ツールバー]を選択した時に
実行される処理はどのように調べれば良いのでしょうか?

Application Wizardで
オブジェクトID(ID_VIEW_TOOLBARのCOMMAND)の
COMMANDメッセージに割り当てた関数が実行される
イメージでいたのですが、そんなものも割り当てられていないし..

よろしくお願いします。

NEG(ねぐ) [E-Mail] [HomePage] 2002/12/05(木) 14:27:16
 MFCの内部で処理されています。
 WINFRM.CPPのCFrameWnd::OnUpdateControlBarMenuですね。

もも 2002/12/05(木) 14:51:58
NEG(ねぐ)さん、ありがとうございます。

今ひとつ不明なとこなのですが...

例えば...
メニューの[表示]−[ツールバー]が選択された時、

通常の処理
  +
「ツールバーを表示します!」というメッセージを表示する

という処理を行いたい場合は、どのような
手順で処理を追加すればよいのでしょうか?

WINFRM.cpp を変更するというわけには
行かないと思うのですが...

よろしくお願いします。

dairygoods 2002/12/05(木) 16:16:46
> オブジェクトID(ID_VIEW_TOOLBARのCOMMAND)の
> COMMANDメッセージに割り当てた関数が実行される
> イメージでいたのですが、そんなものも割り当てられていないし..

WINFRM.CPPにちゃんとメッセージマップの割り当てがあります。

ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu)
ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck)


独自の処理を追加したければ、普通にメニューハンドラを作って、
その中から、CFrameWnd::OnBarCheck()を呼び出せばよいでしょう。

もも 2002/12/05(木) 17:30:52
dairygoodsさん、ありがとうございます。

> 独自の処理を追加したければ、普通にメニューハンドラを作って、
> その中から、CFrameWnd::OnBarCheck()を呼び出せばよいでしょう。

ID_VIEW_TOOLBARのCOMMANDメッセージに
関数を割り当て、OnBarCheck()を呼び出そうとしましたが、

CFrameWnd::OnBarCheck(nID)の引数(コントロールバーのID)が
指定できなかったため、

ID_VIEW_TOOLBARのUPDATE_COMMAND_UIメッセージに
慣習を割り当て、以下のようにしました。

void CMainFrame::OnUpdateViewStatusBar(CCmdUI* pCmdUI) 
{
// TODO: この位置に command update UI ハンドラ用のコードを追加してください
    if (pCmdUI->m_nID == ID_VIEW_STATUS_BAR )
    {
    CFrameWnd::OnBarCheck(pCmdUI->m_nID);
    AfxMessageBox( "hoge" );
    }
}

結果は、
通常の処理
  +
「hoge」というメッセージを表示する。
ということが出来ました。

やり方はこの方法でよいのでしょうか?

dairygoods 2002/12/06(金) 10:53:09
OnBarCheck()の呼び出し方は問題ないと思いますけど、

> ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateControlBarMenu)
> ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnBarCheck)

とあるように、WM_UPDATE_COMMAND_UIの標準ハンドラはOnUpdateControlBarMenu、
WM_COMMANDの標準ハンドラはOnBarCheckですが、正しく動いたのでしょうか?

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