2009-03-12 31 views
2

どのようにCBitmapButtonを無効にしますか?私はm_bitmapbutton.EnableWindow(false)を使ってみました。それは動作しません。それでもイベントは発生します。CBitmapButtonをどのように無効にしますか?

私がしようとしているのは、イベントBが(ボタンBから)実行されている場合、ボタンAがイベントAを発生させないようにすることです。だから、イベントBには、私はボタンA.

答えて

1

を無効にしたいここでチェックするもののリストです:

  • あなたは、ビットマップボタンの無効状態のための画像を定義しましたか?
  • イベントが発生していますか?
  • イベントBはスレッドにありませんか?
  • イベントBの開始時にm_bitmapbutton.EnableWindow(FALSE)を、終了時にm_bitmapbutton.EnableWindow(TRUE)を実行していますか?
  • BN_CLICKED通知()を行っていますか?それとも、WM_LBUTTONDOWN Notification()などの別の通知ですか?
  • 変数m_bitmapbuttonがボタンAに正しく関連付けられていますか? GetDlgItem(IDC_BUTTON_A) - > EnableWindow(FALSE)を試してください。

ボタンAが無効であることを示すためにブール値のメンバー変数を設定するだけで、このブール値メンバーが設定されたときに送られるイベントは無視されます。

this class from CodeProjectの方が使いやすいかもしれません。

+0

両方の質問にはいります。これはバグですか? このクラス以外のオプションはありますか? –

+0

あなたはCodeProjectボタンを使う方が良いと思います。 –

+0

イベントBはスレッドではありませんか?イベントBの開始時にm_bitmapbutton.EnableWindow(FALSE)を行い、最後にm_bitmapbutton.EnableWindow(TRUE)を実行していますか? –

0

イベントBに参加している間に、このウィンドウのメッセージがディスパッチされないという問題があると思います。イベントBに出席してボタンAを再び有効にした後、キューに入れられてディスパッチされます。そのような何か:

  1. OnBnClickedButtonB
  2. buttonA.EnableWindow(FALSE) (ウィンドウのマウスイベントがキューイングされていると、送出されません)
  3. buttonA.EnableWindow(TRUE)
  4. 〜OnBnClickedButtonB (ボタンが再び有効になるようにアプリケーションがキューに入れられたイベントを送出する)

これはCBitmapButtonの問題ではありません。他のボタン(私は自分自身を試していない)。

:私はthigsこの種の...多分誰かがあなたをよりよい解決策を与えることができないあまり好きではなかったものの

可能な回避策は...もう一度ボタンを有効にする前に、このウィンドウのマウスイベントをディスパッチすることができ

void CMyDlg::OnBnClickedButtonB() 
{ 
    m_buttonA.EnableWindow(FALSE); 

    //Process button B clicked event 

    MSG msg; 
    while(PeekMessage( &msg, 
       GetSafeHwnd(), 
       WM_MOUSEFIRST, 
       WM_MOUSELAST, 
       PM_REMOVE)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    m_buttonA.EnableWindow(TRUE); 
} 

このヘルプが必要です。

ハビエル

関連する問題