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(**);
}
よろしくお願いします。
私も同じことで悩んでいます。
どなたか、ご存知の方お教えください。
CToolBarCtrl::EnableButtonで更新しても、UPDATE_COMMAND_UIハンドラ
で元に戻されてしまうので、うまくいかないはずです。
(メッセージが全く処理されていない場合も更新されませんが(後述))
UPDATE_COMMAND_UIハンドラで処理しましょう。
>次のように更新ハンドラを使用しても、やはり即座には表示が更新され
>ないようです。
UPDATE_COMMAND_UIハンドラが呼び出されるのは、アイドリング処理
(メッセージキューが空になった状態の処理)です。とはいっても、メッセー
ジループが正しく回っていれば、ほぼ一瞬のはずですが。
で、今回の問題ですが、平井さんの『ある処理』というのが、長時間に
渡る処理で、その間メッセージが全く処理されてないのだと推察されます。
だから、UPDATE_COMMAND_UIハンドラが呼び出されず、更新されないかと。
もしそうなら、こういった時間のかかる処理はマルチスレッドにするのが
よろしいかと思います。