请提供帮助:未单击自定义单选按钮(MFC、VC+;+;6)

请提供帮助:未单击自定义单选按钮(MFC、VC+;+;6),mfc,radio-button,Mfc,Radio Button,我已经派生了一个CButton类并创建了自己的Radio按钮控件。这一切都很好地工作,但我不能让父对话框在单击单选按钮时进行检测 如果调用CButton::OnLButtonUp(),父对话框将检测单选按钮单击,但这样做的问题是框架也会绘制单选按钮。我不想那样做,因为我自己正在画单选按钮 有人能告诉我在这种情况下如何阻止Windows/MFC框架绘制控件吗?如果我不调用CButton::OnLButtonUp(),那么是的,Windows/MFC不会绘制控件,但我的父对话框也不会得到BN_单击通

我已经派生了一个CButton类并创建了自己的Radio按钮控件。这一切都很好地工作,但我不能让父对话框在单击单选按钮时进行检测

如果调用CButton::OnLButtonUp(),父对话框将检测单选按钮单击,但这样做的问题是框架也会绘制单选按钮。我不想那样做,因为我自己正在画单选按钮

有人能告诉我在这种情况下如何阻止Windows/MFC框架绘制控件吗?如果我不调用CButton::OnLButtonUp(),那么是的,Windows/MFC不会绘制控件,但我的父对话框也不会得到BN_单击通知

我知道我可以将自定义消息发送回我的对话框,但我不希望这样-我希望与BN_单击的消息兼容

正如您将在下面看到的,我还尝试将消息发回拥有者对话框,但这也不起作用

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!!
}

我已经解决了。我去掉了OnDrawItem()(AFX_MSG),改为添加了DrawItem(AFX_VIRTUAL)。另外,在PreSubClassWindow()中,我修改了按钮的样式,按钮被视为一个BS_按钮,BN_单击事件现在被发送到我的父对话框

简言之: -不要使用OnPaint() -不要使用OnDrawItem() -使用:


只是尝试使用OnDrawItem()(删除了所有WM_PAINT/OnPaint处理程序)-现在它正在调用CButton::OnDrawItem!!在\u WM\u DRAWITEM()上,项目()位于消息映射中。。afx_msg void OnDrawItem(int-nIDCtl,LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT)。。位于头文件的AFX_MSG()部分。为什么它不在我的派生类中使用OnDrawItem()?我以前开发了一个自定义按钮控件,它工作得很好-为什么单选按钮如此困难?//派生类负责为所有者/自绘制控件void CButton::DrawItem(LPDRAWITEMSTRUCT){ASSERT(FALSE);}实现所有这些处理程序//如何创建CNCCheckBox?我已经解决了它。我去掉了OnDrawItem()(AFX_MSG),改为添加了DrawItem(AFX_VIRTUAL)。另外,在PreSubClassWindow()中,我修改了按钮的样式,按钮被视为一个BS_按钮,BN_单击事件现在被发送到我的父对话框。简而言之:-不要使用OnPaint()-不要使用OnDrawItem()-使用虚拟的void DrawItem(LPDRAWITEMSTRUCT LPDRAWITEMSTRUCT);改为在AFX_虚拟部分
//{{AFX_VIRTUAL(CNCCheckBox)
public:
virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
protected:
virtual void PreSubclassWindow();
//}}AFX_VIRTUAL