ツールバーを手動で再描画するには? – プログラミング – Home

ツールバーを手動で再描画するには?
 
通知
すべてクリア

ツールバーを手動で再描画するには?


平井
 平井
(@平井)
ゲスト
結合: 23年前
投稿: 48
Topic starter  

VisualC++6.0 で質問です。

ある処理をしている間、メニュー及びツールバーのボタンコントロールを
灰色にする、という処理を実装したいと思っています。

メニューを灰色にするのはうまくいったのですが、ツールバーのボタン
コントロールを灰色に設定した後、ツールバーを再描画することができず
に悩んでいます。

ボタンコントロールを灰色にする設定は次のように設定しています。

void CMainFrame::MyEnableButton(BOOL flag)
{
CToolBarCtrl &toolbar = m_wndToolBar.GetToolBarCtrl();
toolbar.EnableButton(ID_FILE_NEW, flag);
toolbar.EnableButton(ID_FILE_OPEN, flag);
}

次のように更新ハンドラを使用しても、やはり即座には表示が更新され
ないようです。

void CMainFrame::OnUpdateFileNew(CCmdUI* pCmdUI)
{
pCmdUI->Enable(**);
}

よろしくお願いします。


引用解決済
トピックタグ
ミロ
 ミロ
(@ミロ)
ゲスト
結合: 23年前
投稿: 1
 

私も同じことで悩んでいます。
どなたか、ご存知の方お教えください。


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 23年前
投稿: 72
 

CToolBarCtrl::EnableButtonで更新しても、UPDATE_COMMAND_UIハンドラ
で元に戻されてしまうので、うまくいかないはずです。
(メッセージが全く処理されていない場合も更新されませんが(後述))
UPDATE_COMMAND_UIハンドラで処理しましょう。

>次のように更新ハンドラを使用しても、やはり即座には表示が更新され
>ないようです。
UPDATE_COMMAND_UIハンドラが呼び出されるのは、アイドリング処理
(メッセージキューが空になった状態の処理)です。とはいっても、メッセー
ジループが正しく回っていれば、ほぼ一瞬のはずですが。

で、今回の問題ですが、平井さんの『ある処理』というのが、長時間に
渡る処理で、その間メッセージが全く処理されてないのだと推察されます。
だから、UPDATE_COMMAND_UIハンドラが呼び出されず、更新されないかと。
もしそうなら、こういった時間のかかる処理はマルチスレッドにするのが
よろしいかと思います。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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