HWND hwnd;
if((hwnd = ::FindWindow(NULL,"temp"))!=0 )
{
//CWnd *pWnd;
char pch[10]="xx";
HWND hwnd1;
hwnd1=::GetWindow(hwnd,GW_CHILD);
while(hwnd1!=NULL)
{
::GetWindowText(hwnd1,pch,10);
if(strcmp(pch,"button1")==0)
{
::SendMessage(hwnd1,WM_ON_BNCLICKED,0,0);
}
::EnableWindow(hwnd1,FALSE);
hwnd1= ::GetWindow(hwnd1,GW_HWNDNEXT);
}
}
else
{
AfxMessageBox("no find",MB_OK);
}
请问::SendMessage(hwnd1,WM_ON_BNCLICKED,0,0);该怎么写,实现的功能是就象鼠标点击temp窗体上的button一样,谢谢

解决方案 »

  1.   

    ::SendMessage(hwnd1, BM_CLICK, 0, 0);
      

  2.   

    其实你这里用 PostMessage 比较好,因为如果你无法确定 Button 的按键事件处理会立即完成的话,SendMessage 不会立刻返回,你的这个线程有可能会在这里堵死。还有如果你只需要给一个按钮发消息的话在 SendMessage 之后应该立刻返回。你应该发送 WM_COMMAND 消息到该按钮的父窗口,也就是说你还需调用 GetWindow( hButtonWnd, GW_OWNER ) 获取它的父窗口句柄。然后 PostMessage( hParentWnd, WM_COMMAND,
    (WPARAM)MAKEWPARAM( nButtonID, BN_CLICKED ), (LPARAM)hButtonWnd );nButtonID 可用 GetWindowLong( hButtonWnd, GWL_ID ) 获取。
      

  3.   

    titilima(李马) 说的方法更简单,如果想要用户看到按钮被按下的话就照它的做。 ^_^
      

  4.   

    李马的方法用过了,不知道为什么每次都要点击两下才执行,但是lichen8566的就完全可以了呵呵,不知道为什么李马的会每次都要电击两下才可以??
      

  5.   

    SendMessage(WM_COMMAND,((WPARAM)BN_CLICKED)<<8|(WPARAM)IDC_BUTTON,0L);
      

  6.   

    BM_CLICK是直接向按钮发送一个模拟的单击消息,按钮的响应过程是在被单击后向父窗口发送一条WM_COMMAND消息(其中包含了BN_CLICKED通知消息),所以相比较而言WM_COMMAND更加可靠。
      

  7.   

    李马的方法用过了,不知道为什么每次都要点击两下才执行,但是lichen8566的就完全可以了呵呵,不知道为什么李马的会每次都要电击两下才可以??楼上的能不能解释一下这个问题,我也不太清楚。
      

  8.   

    PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;而SendMessage必须等待其他程序处理消息后才返回,继续执行。