MFCでダイアログベースのプログラミングをしています。
ツールバーを作成して、以下のようにダイアログに貼り付けました。
m_ToolBar.CreateEx(this);
m_ToolBar.LoadToolBar(IDR_TOOLBAR1);
m_ReBar.Create(this);
m_ReBar.AddBar(&m_ToolBar);
CSize size = m_ToolBar.CalcDynamicLayout(0,LM_HORZ);
CRect rect;
GetClientRect(rect);
mReBar.MoveWindow(0,0,rect.Width(),size.cy+4);
ある条件の時にツールバーの特定の項目を無効にしたいのですが、
どのようにすればいいのでしょうか?
メッセージマップのところに、以下の1行を追加してみました。
ON_UPDATE_COMMAND_UI(ツールバーの無効にしたい項目のID,無効にするメソッド)
ツールバーに関連付けたメソッドは実行されなくなりましたが、
見た目が無効になりませんでした。
よろしくお願い致します。
環境はMFCv6/Windows2000です。
MFCではダイアログへのツールバーの追加はサポートされていないので、以下を参考に
してみてください。
http://www.microsoft.com/japan/developer/library/vcsample/_sample_mfc_dlgcbr32.
htm
ご回答ありがとうございます。
CToolBarを継承してCXXXToolBarを作成して、
以下のメソッドを追加しました。
LRESULT CXXXToolBar::OnIdleUpdateCmdUI(WPARAM wParam,
LPARAM lParam)
{
if (IsWindowVisible())
{
CFrameWnd* pParent = (CFrameWnd*)GetParent();
if (pParent)
OnUpdateCmdUI(pParent, (BOOL)wParam);
}
return OL;
}
そして、最初の私の投稿のコメントにあるm_ToolBar(CToolBarを継承したもの)
の宣言を以下のようにしました。
CXXXToolBar m_ToolBar;
これで、ON_UPDATE_COMMAND_UIに反応すると思ったのですが、
ON_UPDATE_COMMAND_UIでツールバーの特定の項目の有効・無効を
切り替えることができませんでした。
何が足らないのでしょうか?
大変申し訳ありませんが、よろしくお願いいたします。
試したことがないので確かなことは言えませんが、このハンドラは自動的には
呼ばれなかったように思いますので、WM_KICKIDLE等を利用して呼んでやらな
ければならないのかもしれません。
いろいろ試しましたが、勉強不足で、私の実力では
解決することができませんでした。
そのため、CFormViewを使って、ダイアログっぽく見せる
ようにして解決しました。
いろいろと教えていただき、ありがとうございました。