您的位置:首页 > 其它

MFC 窗口按钮的鼠标事件(对于中文和英文按钮的处理)问题

2013-12-02 14:37 447 查看
对于英文的!!!:

 ClickButton( WINDOW_TITLE_REGISTRATION,_T("Continue") );

对于中文的按钮!!!:

 ClickButton( WINDOW_TITLE_REGISTRATION,_T("确定 or 取消") )

 

BOOL CWndHandleThread::ClickButton(CString windowTitle, CStringbutton)

{

 HWND hWnd = ::FindWindow(NULL,windowTitle);

 if( hWnd )

 {

  HWND hButton =::FindWindowEx(hWnd, NULL,NULL,button);

  if( !hButton )

  {

   returnfalse;

  }

  Sleep(2000);

  //将该窗口置顶

  HWND hForeWnd =NULL;        

  DWORDdwForeID;        

  DWORDdwCurID;        

  hForeWnd =::GetForegroundWindow(); //返回用户当前工作的窗口,前台窗口的句柄   

  dwCurID = ::GetCurrentThreadId();  //获取最近运行的线程的ID     

  dwForeID =::GetWindowThreadProcessId( hForeWnd,NULL ); //找出创建前台窗口的线程 

  ::AttachThreadInput( dwCurID,dwForeID, TRUE);//成功返回的话,连接了线程后,输入焦点、窗口激活、鼠标捕获、键盘状态以及输入队列状态都会进入共享状态

  BOOL bIsMinimized =::IsIconic(hWnd); //该函数确定给定窗口是否是最小化

  //如果该窗口最小化了,则恢复原状;

  if (bIsMinimized)

  {

   ::ShowWindow(hWnd,SW_RESTORE); //激活并显示窗口(置顶前提)

   Sleep(500);

  }

  //将该窗口置顶

  ::SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE|SWP_NOSIZE); //重新设置窗口的参数

  Sleep(100);

  RECT rectMain;

  ::GetClientRect(hButton,&rectMain);//客户区

  POINT pt={0};

  pt.x = rectMain.left+(rectMain.right-rectMain.left)/2  ;

  pt.y = rectMain.top+(rectMain.bottom-rectMain.top)/2;

  ::ClientToScreen(hButton,&pt);//将用户指定的坐标或者点转换为屏幕坐标

  SetCursorPos(pt.x, pt.y);//移动光标到指定位置

  mouse_event(MOUSEEVENTF_LEFTDOWN,0, 0, 0,0); //鼠标事件的完成

  mouse_event(MOUSEEVENTF_LEFTUP,0, 0, 0,0);

 

  Sleep(100);

  ::SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);//确认是否已经置顶窗口

  ::AttachThreadInput(dwCurID,dwForeID,FALSE); //撤消连接非共享输入队列

  return true;

 }

 return false;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐