我从CStatic继承了控件CMyLabel,并映射消息ON_CONTROL_REFLECT(BN_CLICKED, OnClicked)
//...
afx_msg void OnClicked();
//...
void CMyLabel::OnClicked() 
{
TRACE0("[CClickLabel]OnClicked...\n");
//m_funClick是我定义的回调函数,在外部指定
//typedef void (*ClickFunc)(CWnd *);
//ClickFunc m_funClick; if(m_funClick){
m_funClick(this);
}else{
#ifdef _DEBUG
TRACE0("******Undefined callback function.*******\n");
#endif
//如果没有定义回调函数,我想调用界面中指定的响应函数。
}
}
 现在我在窗口中添加了一个static, CMyLabel m_labelTest.
双击static添加消息处理函数afx_msg void OnStnClickedLabelTest();
现在我想在上面m_funClick没有指定的时候调用OnStnClickedLabelTest函数,改如何传递这个消息啊。

解决方案 »

  1.   

    没看懂,你是要在哪里调用OnStnClickedLabelTest?你单独调用它的意义是什么?如果只是为了执行这个函数体中的代码,那应该将这段代码独立成函数。
      

  2.   

    OnStnClickedLabelTest是我在窗口中双击static控件添加进来的
    ON_STN_CLICKED(IDC_MODIFY_GAME_PATH, OnStnClickedLabelTest)我在子类中加入了ON_CONTROL_REFLECT(BN_CLICKED, OnClicked),所以每次单击控件的时候都是调用这个OnClicked了,而不调用我添加的OnStnClickedLabelTest函数。
    现在我想在窗体中单击static控件时能调用OnStnClickedLabelTest而不是OnClicked。
      

  3.   

    你是不希望子类代码发生变化吗?
    那你可以在对话框类中截获按钮的点击事件进行处理
    例如:
    BOOL C***Dlg::PreTranslateMessage(MSG* pMsg) 
    {
    if((pMsg->hwnd == m_CalcTimePos.m_hWnd) && (pMsg->message == WM_KEYDOWN))
    {
    COleDateTime calcTime = m_CalcTimePos.GetDate();
    COleDateTimeSpan span = calcTime - m_NowTime;
    int nDays = span.GetTotalDays();
    m_TimeSlider.SetPos(span.GetTotalMinutes());
                            return 0;
    }