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