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

[戻る]
平井 2001/10/17(水) 10:06:46
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(**);
}

よろしくお願いします。

ミロ 2001/11/27(火) 14:08:09
私も同じことで悩んでいます。
どなたか、ご存知の方お教えください。

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

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

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

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