2009-03-12 3 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); 
} 

희망이 도움이됩니다.

하비에르

관련 문제