一个基于对话框的MFC EXE,有一个按钮和一个复选框。
代码如下://点击复选框弹出“被点击了”
void CMyDlg::OnCheck1() 
{
if (IsDlgButtonChecked(IDC_CHECK1))
{
AfxMessageBox("被点击了");
}
}//点击按钮向复选框发送消息
void CMyDlg::OnButton1() 
{
::SendMessage(pdlg->GetDlgItem(IDC_CHECK1)->GetSafeHwnd(),BM_SETCHECK,BST_CHECKED,0); 
}我的问题是:按了按钮后,复选框确实被选中了(有了对勾),但没有弹出“被点击了”(也就是说没有执行OnCheck1)。有没有办法直接发送一条点击复选框的消息,让复选框不仅能被选中而且还能执行它的OnCheck函数呢?
就像:给按钮发送一条消息,就能点击按钮并执行按钮的点击响应函数那样...

解决方案 »

  1.   

    按钮下改成这样:
    //点击按钮向复选框发送消息
    void CMyDlg::OnButton1() 
    {
         ::SendMessage(GetDlgItem(IDC_CHECK1)->GetSafeHwnd(),WM_LBUTTONDOWN,BST_CHECKED,0);  ::SendMessage(GetDlgItem(IDC_CHECK1)->GetSafeHwnd(),WM_LBUTTONUP,0,0);    
    }
      

  2.   

    ::SendMessage(GetDlgItem(IDC_CHECK1)->GetSafeHwnd(),WM_COMMAND,BM_CLICK,0); 
      

  3.   

    void CMyDlg::OnButton1() 
    {
        ::SendMessage(pdlg->GetDlgItem(IDC_CHECK1)->GetSafeHwnd(),BM_SETCHECK,BST_CHECKED,0);
        OnCheck1();  
    }这样就可以了,OnCheck1()是对话框的函数,又不是复选框的函数。
      

  4.   

    void CMyDlg::OnButton1()
    {
        pbtn = pdlg->GetDlgItem(IDC_CHECK1);
        pbtn->SetCheck(BST_CHECKED);
        pdlg->SendMessage(WM_COMMAND, MAKEWPARAM(IDC_CHECK1, BN_CLICKED), pbtn->GetSafeHwnd());
    }