2015-01-13 15 views
0

CDialog의 CButton 인 라디오 단추가 있습니다. 사용자가 라디오 버튼을 클릭하면 OnClickedRadioButton 함수가 호출됩니다.MFC 토글 라디오 단추가 지연됩니다.

OnClickedRadioButton 내부 나는이 함수를 호출하여 버튼을 전환 :

void toggleButton(CButton& theButton) 
{ 
    switch(theButton.GetCheck()) 
    { 
     case BST_UNCHECKED: 
     { 
      theButton.SetCheck(BST_CHECKED); 
      break; 
     } 
     case BST_CHECKED: 
     { 
      theButton.SetCheck(BST_UNCHECKED); 
      break; 
     } 
     default: 
     { 
      theButton.SetCheck(BST_UNCHECKED); 
     } 
    } 
} 

내가 & 컴파일

프로그램을 실행 (I) 라디오 버튼이 선택된 경우, 나는 그것을 취소를 클릭 할 수 있습니다. (ii) 라디오 버튼이 선택되어 있지 않으면 클릭하고 아무 일도 일어나지 않습니다. 그러나 다른 프로그램 (예 : 시각 스튜디오)을 클릭 한 다음 CDialog를 다시 클릭하면 라디오 버튼이 선택됩니다.

나는 & 시도한 기능 Cwnd::UpdateDialogControlsCwnd::UpdateData을 보았지만 이러한 문제를 해결할 수 없었습니다.

+1

당신은 당신이 라디오 버튼을 클릭 할 때 알고 있습니다 , OnClickedRadioButton 이벤트를 발생시키는 SetCheck 메서드를 사용합니까? – rrirower

+0

@rrirower 아니, 나는 몰랐다. 나는 MFC가 처음이다. 사용자가 라디오 버튼을 토글 할 수있는 좋은 방법을 알고 계십니까? – user3731622

+0

잘못된 컨트롤을 사용하고있을 수 있습니다. "토글 링"은 대개 '켜짐'또는 '꺼짐'이 될 수 있으므로 확인란을 의미합니다. – rrirower

답변

0

나는이 문제가 SetCheck가 다른 OnClickedRadioButton 이벤트를 발생시키는 @rrirower 주석과 관련이 있다고 생각합니다.

근본 원인에 관계없이 BST_CHECKEDBST_UNCHECKED 사이에서 라디오 버튼을 토글하는 빠른 구현은 라디오 버튼의 자동 속성을 False로 설정하는 것이 었습니다.

이 작업을 수행하려면 : 1) 라디오 버튼과 모양 섹션에서 속성을 선택 3)을 마우스 오른쪽 버튼으로 클릭 비주얼 스튜디오 2)에서 리소스를 열고 False로 자동 속성을 설정합니다.

1) 메시지에 라디오 버튼 IDC_RADIO 추가 : 여기

는 CDialog를 서브 클래스에서 하나의 라디오 버튼을 토글 전체적인 솔루션 (이미 ID IDC_RADIO와 라디오 버튼이있는 대화 자원 추가 가정) 이 행을 배치하여지도

ON_BN_CLICKED(IDC_RADIO, OnBnClickedRadioButton) 

(BEGIN_MESSAGE_MAP ~ END_MESSAGE_MAP)

2)를 CDialog

의 하위 클래스에 추가)
void OnBnClickedRadioButton() 
{ 
    toggleButton(*(CButton*)GetDlgItem(IDC_RADIO)); 
} 

3가 CDialog

의 하위 클래스에 토글 기능을 핸들러 함수를 추가
void toggleButton(CButton& theButton) 
{ 
    switch(theButton.GetCheck()) 
    { 
     case BST_UNCHECKED: 
     { 
      theButton.SetCheck(BST_CHECKED); 
      break; 
     } 
     case BST_CHECKED: 
     { 
      theButton.SetCheck(BST_UNCHECKED); 
      break; 
     } 
     default: 
     { 
      theButton.SetCheck(BST_UNCHECKED); 
     } 
    } 
}