一个Dialog上两个Button(IDC_BUTTON1和IDC_BUTTON2)想实现按下Button1时程序触发Button2的BN_CLICKED事件代码如下:
void CTestDlgDlg::OnButton1() 
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_BUTTON1)->SendMessage(WM_COMMAND, MAKELPARAM(IDC_BUTTON2, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON2)->GetSafeHwnd()));
}为什么不对呢?试了两天了,给父类发消息也不行啊?百思不得其解!

解决方案 »

  1.   

    SendMessage(WM_COMMAND, MAKELPARAM(IDC_BUTTON2, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON2)->GetSafeHwnd()));
    就行了。对了,为什么不直接调用
      

  2.   

    给当前窗口发就行
    SendMessage(WM_COMMAND, MAKELPARAM(IDC_BUTTON2, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON2)->GetSafeHwnd()));
    或者
    this->SendMessage(WM_COMMAND, MAKELPARAM(IDC_BUTTON2, BN_CLICKED), (LPARAM)(GetDlgItem(IDC_BUTTON2)->GetSafeHwnd()));
      

  3.   

    多谢,果然是这样,钻了死胡同出不来了,赫赫那还想请问为何我的代码不对呢?我发送的消息到哪里去了呢,我在MFC里跟踪了半天,好像消息不见了
      

  4.   

    下面的搞定:向一个按钮发送单击消息
    SendMessage(WM_COMMAND,((WPARAM)BN_CLICKED)<<8|(WPARAM)IDC_BUTTON2,0L);
      

  5.   

    用这两个可实现按钮的模拟按下操作:
    SendMessage(hButton[3],BM_SETSTATE,1,0);
    SendMessage(hButton[3],BM_SETSTATE,0,0);
    但好像只是表示给人看的。你可以试着捕捉当单击Button2时,程序获得的消息,看消息的wParam和lParam参数各是什么。然后向父窗口发送这个消息。
      

  6.   

    use the API SendMessage : )
      

  7.   

    我不太明白的是:空间其实也是一个window,比如IDC_BUTTON2,它应该也有自己的消息循环吧,那么我发送的消息到哪里去了呢?由谁来处理呢?
      

  8.   

    还是发到主程序的消息队列,用spy可以查到,wm_command;如果不进入消息队列,也就不能处理了。