ツールバー上にあるボタンを無効にする。 – プログラミング – Home

ツールバー上にあるボタンを無効にする。
 
通知
すべてクリア

[解決済] ツールバー上にあるボタンを無効にする。


龍
 龍
(@龍)
ゲスト
結合: 23年前
投稿: 7
Topic starter  

こんばんわ

ツールバーにあるボタンを
CToolBarCtrlクラスを使って無効にしたいのですが、
うまく動きません。
何卒、良きアドバイスをお願いいたします。

メインフレームで以下のようなコードをかきました。
ツールバーのボタンIDはID_BUTTON_ONEとし、
m_wndToolBar.GetToolBarCtrl().EnableButton(ID_BUTTON_ONE, FALSE);としました。
デバックで観ると、実行はされる(一瞬無効になる)のですが、その後で元に戻ってしま
う感じです。なぜ元に戻るか判りません。

環境は WinXP,VC++6.0,SDIです。
よろしくお願いいたします。


引用未解決
トピックタグ
Tab
 Tab
(@Tab)
ゲスト
結合: 20年前
投稿: 11
 

ID_BUTTON_ONE の UPDATE_COMMAND_UI ハンドラで有効/無効を切り替えるようにしてく
ださい。
他に方法が無いってわけではないけれど、それが MFC での定石です。


返信引用
龍
 龍
(@龍)
ゲスト
結合: 23年前
投稿: 7
Topic starter  

アドバイスどうもありがとうございます。

どうしても、下記方法でボタンを無効にしたいのですが、無理なのでしょうか?
m_wndToolBar.GetToolBarCtrl().EnableButton(ID_BUTTON_ONE, FALSE);

以上、よろしくお願いいたします。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

それで無効にしても、UPDATE_COMMAND_UI で処理をしなければ、有効化されてしまうの
でしょう。

なぜ、「どうしてもそうしなければならない」のかを書けば、「どうしてもそうしなけ
ればならない」という制限自体を回避する方法が見つかるかもしれませんよ。

ただ、少なからず苦しい方法にはなるでしょうが。


返信引用
Tab
 Tab
(@Tab)
ゲスト
結合: 20年前
投稿: 11
 

>どうしても、下記方法でボタンを無効にしたいのですが、無理なのでしょうか?
>m_wndToolBar.GetToolBarCtrl().EnableButton(ID_BUTTON_ONE, FALSE);

普通は、
専用のフラグを用意しておいて、そのフラグに有効/無効を設定します。
そして、UPDATE_COMMAND_UI でそのフラグ状態に従ってコマンドの有効/無効を切り替
えます。

コマンドはメニュー、ツールバーなど複数の UI 要素に関連付けられるものであり、
UPDATE_COMMAND_UI はそれらを状況依存で集中管理するのに使われます。
各 UI 要素が UPDATE_COMMAND_UI に問い合わせて状態を更新するイメージです。

ID_BUTTON_ONE コマンドはツールバーボタンにだけ置くコマンドなのですか?
仮にそうだとして、あとでメインメニューにも入れたくなったらどうします?
右クリックメニューに追加したくなったらどうします?
ボタンが不要になったら各所に書かれた EnableButton() も削除しなくちゃいけないで
すよ?

UPDATE_COMMAND_UI に書いておけば、関連する UI 要素の追加/削除は自由自在にでき
るのです。

ボタンがコマンドのマスターであり絶対不変のものだというのであれば、
UPDATE_COMMAND_UI の中に、
pCmdUI->Enable(m_wndToolBar.GetToolBarCtrl().IsButtonEnabled(ID_APP_ABOUT));
とでも記述すれば、意図通りのことが実現できるかもしれません。
#よいこは真似をしないでね


返信引用
Tab
 Tab
(@Tab)
ゲスト
結合: 20年前
投稿: 11
 

> pCmdUI->Enable(m_wndToolBar.GetToolBarCtrl().IsButtonEnabled(ID_APP_ABOUT));
pCmdUI->Enable(m_wndToolBar.GetToolBarCtrl().IsButtonEnabled(ID_BUTTON_ONE));
~~~~~~~~~~~~~


返信引用
龍
 龍
(@龍)
ゲスト
結合: 23年前
投稿: 7
Topic starter  

Tab様 レスどうもありがとうございました。
また、回答が遅れて大変申し訳ございませんでした。

上記ツールバーのボタンに関しては、フラグを用意し制御することにいたします。

また、この場を借りての便乗質問で申し訳ないのですが、
ダイアログバーに創ったボタンを無効にするにはどうすればよいのでしょうか。

GetDlgItem(***)->EnableWindow(FALSE)では無効にできませんでした。
また、無効にしたいボタンにUPDATE_COMMAND_UIのハンドラがありませんでした。?

どうか、良きアドバイスをお願いいたします。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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