ツールバーのある項目を無効にしたい – プログラミング – Home

ツールバーのある項目を無効にしたい
 
通知
すべてクリア

[解決済] ツールバーのある項目を無効にしたい


久島
 久島
(@久島)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

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です。


引用未解決
トピックタグ
Wanderer
 Wanderer
(@Wanderer)
ゲスト
結合: 22年前
投稿: 35
 

MFCではダイアログへのツールバーの追加はサポートされていないので、以下を参考に
してみてください。

http://www.microsoft.com/japan/developer/library/vcsample/_sample_mfc_dlgcbr32.
htm


返信引用
久島
 久島
(@久島)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

ご回答ありがとうございます。
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でツールバーの特定の項目の有効・無効を
切り替えることができませんでした。
何が足らないのでしょうか?

大変申し訳ありませんが、よろしくお願いいたします。


返信引用
Wanderer
 Wanderer
(@Wanderer)
ゲスト
結合: 22年前
投稿: 35
 

試したことがないので確かなことは言えませんが、このハンドラは自動的には
呼ばれなかったように思いますので、WM_KICKIDLE等を利用して呼んでやらな
ければならないのかもしれません。


返信引用
久島
 久島
(@久島)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

いろいろ試しましたが、勉強不足で、私の実力では
解決することができませんでした。
そのため、CFormViewを使って、ダイアログっぽく見せる
ようにして解決しました。

いろいろと教えていただき、ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました