您的位置:首页 > 其它

获取光标位置方法研究

2014-09-28 00:45 344 查看
 获取光标位置方法研究
                                      
johnchen
 
获取光标位置可以使用GetCaretPos函数获取位置,也可以通过GetGUIThreadInfo函数获取位置。

1、GetCaretPos函数获取光标位置,实现代码:

     CPoint point;

     CRect rect;

     GetWindowRect(&rect);

     HWND hwnd=::GetFocus();

     HWND pHwnd=::GetForegroundWindow();

     AttachThreadInput(GetCurrentThreadId(),::GetWindowThreadProcessId(pHwnd,NULL),TRUE);

    ::GetCaretPos(&point);

     ::ClientToScreen(hwnd,&point);

     AttachThreadInput(GetCurrentThreadId(),::GetWindowThreadProcessId(pHwnd,NULL),FALSE);

2、GetGUIThreadInfo函数获取光标位置,实现代码:

     #include   <winable.h>

    HWND hwnd;

    GUITHREADINFO pg;

    POINT point;//光标位置 

    pg.cbSize=48;

   ::GetGUIThreadInfo(NULL,&pg);

    hwnd=pg.hwndCaret;

    if (pg.hwndCaret)

    {

      point.x=pg.rcCaret.right;

      point.y=pg.rcCaret.bottom;

      ::ClientToScreen(pg.hwndCaret,&point);

     }
   //CString str;

   //str.Format("x=%d,y=%d",point.x,point.y);

   //AfxMessageBox(str);
总结:GetCaretPos函数能获取WIN32一些程序窗口中光标位置,但是在IE7和WORD里GetCaretPos是不能获取光标位置的。而GetGUIThreadInfo函数获取窗口坐标位置是没有限制,不过在VCL、GTK、SWT界面框架的窗口具体能不能得到位置没有试过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: