나는 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!!
}
그냥 대신 (모든 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
CNCCheckBox는 어떻게 작성하고 있습니까? – Goz
해결했습니다. OnDrawItem() (AFX_MSG)을 제거하고 대신 DrawItem (AFX_VIRTUAL)을 추가했습니다. 또한 PreSubClassWindow()에서 BS_PUSHBUTTON 및 BN_CLICKED 이벤트가 부모 대화 상자로 보내지는 것처럼 단추의 스타일을 수정합니다. 짧은 그래서 : -의 OnPaint() 를 사용하지 마십시오 -의 OnDrawItem() 사용하지 마십시오 -를 사용하여 가상 무효 DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct를); 대신 AFX_VIRTUAL 섹션에 – SparkyNZ