- 注册时间
- 2021-4-16
- 最后登录
- 2023-9-20
- 在线时间
- 1 小时
编程入门
- 龙马币
- 18
|
获取光标位置方法研究
获取光标位置可以使用GetCaretPos函数获取位置,也可以通过GetGUIThreadInfo函数获取位置。
1、GetCaretPos函数获取光标位置,实现代码:
- <div>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);</div>
复制代码
2、GetGUIThreadInfo函数获取光标位置,实现代码:
- <div>#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);</div>
复制代码
总结:GetCaretPos函数能获取WIN32一些程序窗口中光标位置,但是在IE7和WORD里GetCaretPos是不能获取光标位置的。
而GetGUIThreadInfo函数获取窗口坐标位置是没有限制,不过在VCL、GTK、SWT界面框架的窗口具体能不能得到位置没有试过。
|
|