2009-12-09 5 views
0

나는 CButton 클래스를 파생시키고 고유 한 방사 버튼 컨트롤을 만들었습니다. 그것은 모두 내가 라디오 버튼을 클릭했을 때를 감지하기 위해 부모 대화 상자를 얻을 수 없다는 예외적 인 경우에 훌륭하게 작동합니다.도움말 : No 사용자 정의 라디오 버튼 (BN_CLICKED)에 대한 사용자 정의 라디오 버튼 (MFC, VC++ 6)

CButton :: OnLButtonUp()을 호출하면 상위 대화 상자가 라디오 버튼 클릭을 감지하지만 프레임 워크에서도 라디오 버튼을 그립니다. 나는 라디오 버튼을 직접 그리기 때문에 그것을하고 싶지 않다.

누군가가 Windows/MFC 프레임 워크를 제어하는 ​​방법을이 경우 제어하는 ​​방법을 알려주십시오. 예를 들어 CButton :: OnLButtonUp()을 호출하지 않으면 Windows/MFC는 컨트롤을 그리지 않지만 부모 대화 상자는 BN_CLICKED 알림을받지 못합니다.

나는 대화 상자에 사용자 지정 메시지를 보낼 수 있지만 원하는 것은 아니지만 - BN_CLICKED 메시지와의 호환성을 원합니다.

아래에서 볼 수 있듯이 소유 대화 상자에 메시지를 게시하려고 시도했지만이 방법도 작동하지 않습니다.

void CNCCheckBox::OnLButtonUp(UINT nFlags, CPoint point) 
{ 
    if(m_Owner) 
    m_Owner->PostMessage(BN_CLICKED, (WPARAM) IDC_RAD_1/*GetDlgCtrlID()*/, (LPARAM) this->m_hWnd); 
    //CButton::OnLButtonUp(nFlags,point); // Can't use this!! 
} 
+0

그냥 대신 (모든 WM_PAINT/OnPaint를 핸들러 제거의 OnDrawItem()를 사용하여 시도) - 호출하는 CButton :: OnDrawItem !! ON_WM_DRAWITEM() msg ​​map에 있습니다. afx_msg void OnDrawItem (int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct); .. 헤더 파일의 AFX_MSG() 섹션에 있습니다. 파생 클래스에서 OnDrawItem()을 사용하지 않는 이유는 무엇입니까? 이전에 괜찮 았던 사용자 정의 푸시 버튼 컨트롤을 파생 시켰습니다 - 왜 라디오 버튼이 그렇게 어렵습니까? // 파생 클래스는 // 소유자/셀프 컨트롤 무효를 CButton :: DrawItem (LPDRAWITEMSTRUCT) { ASSERT (FALSE)를 그릴 이 핸들러를 모두 구현하기위한 책임이있다; } – SparkyNZ

+0

CNCCheckBox는 어떻게 작성하고 있습니까? – Goz

+0

해결했습니다. OnDrawItem() (AFX_MSG)을 제거하고 대신 DrawItem (AFX_VIRTUAL)을 추가했습니다. 또한 PreSubClassWindow()에서 BS_PUSHBUTTON 및 BN_CLICKED 이벤트가 부모 대화 상자로 보내지는 것처럼 단추의 스타일을 수정합니다. 짧은 그래서 : -의 OnPaint() 를 사용하지 마십시오 -의 OnDrawItem() 사용하지 마십시오 -를 사용하여 가상 무효 DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct를); 대신 AFX_VIRTUAL 섹션에 – SparkyNZ

답변

0

나는 그것을 풀었다. OnDrawItem() (AFX_MSG)을 제거하고 대신 DrawItem (AFX_VIRTUAL)을 추가했습니다. 또한 PreSubClassWindow()에서 BS_PUSHBUTTON 및 BN_CLICKED 이벤트가 부모 대화 상자로 보내지는 것처럼 단추의 스타일을 수정합니다. 짧은 그래서

: -의 OnPaint() 를 사용하지 마십시오 -의 OnDrawItem() 사용하지 마십시오 - 사용 :

//{{AFX_VIRTUAL(CNCCheckBox) 
public: 
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); 
protected: 
virtual void PreSubclassWindow(); 
//}}AFX_VIRTUAL