MFC如何知道光标在那个控件上 用哪个函数?谢谢

如题

WindowFromPoint 函数功能:该函数获得包含指定点的窗口的句柄。
函数原型:HWND WindowFromPoint(POINT Point);
参数:
Point:指定一个被检测的点的POINT结构。
返回值S:返回值为包含该点的窗口的句柄。如果包含指定点的窗口不存在,返回值为NULL。如果该点在静态文本控制之上,返回值是在该静态文本控制的下面的窗口。
备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。应用程序应该使用ChildWindowFromPoint函数进行无限制查询。
速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。

再结合 OnMouseMover ,就能判断出来了吧

参考资料:http://baike.baidu.com/view/1080360.htm

温馨提示:内容为网友见解,仅供参考
第1个回答  2009-08-07
GetFocus(),正常情况下得到的就是光标所在的控件。

但是有些扩展控件能自己实现闪烁光标,那你是没法得到的。
第2个回答  2009-08-07
有一个比较笨的方法,在每个控件窗口函数中添加一个WM_MOUSEMOVE 消息,响应函数中返回一个值,通过这个值来判断;
第3个回答  2009-08-06
没有这样的函数,你可以用其他方法实现
第4个回答  2009-08-06
::GetFoucs()

例如
if(::GetFoucs() == GetDlgItem(ID)->m_hWnd)
{

}本回答被网友采纳

MFC如何知道光标在那个控件上 用哪个函数?谢谢
备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。应用程序应该使用ChildWindowFromPoint函数进行无限制查询。速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。再结合 OnMouseMover ,就能判断出来了吧 参考...

我做了一个MFC文件,一个对话框里有多个编辑框,我想知道我的鼠标在哪个...
如果要判断光标在哪个输入框里,用getfocus就行了

mfc如何获取窗口外鼠标坐标,并显示? 我添加了一个mousemove事件,在里...
可以用SetCapture函数。函数原型:HWND SetCapture(HWND hwnd);函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将...

MFC 中,我启用线程后,在线程函数中如何获取当前光标所在位置?
this指针存放在主线程的堆栈中,传递到子线程的指针访问的其实是子线程的堆栈,当然不可能获得正确值,其实你直接传递光标坐标即可。在子线程对界面进行处理,会导致线程频繁切换,反而影响效率。

vc MFC EDIT控件 设置光标位置
应该先得到文本长度,然后用 SetSel 方法。假如得到的长度是 dwLen ,那么可以这样:((CEdit*)GetDlgItem(IDC_EDIT2))->SetSel(dwLen,dwLen,TRUE);

基于对话框的mfc,光标指向问题及回车默认键问题
1.在对话框编辑器中按Ctrl-D可以调整Tab键的顺序,你只要将"跟随系统"这个按钮的Tab顺序,调整为1在打开的时候,启动程序的时候光标就会在这个位置上.2.响应"手动设置"这个按钮,在里面添加"GetDlgItem(XXXX)->SetFocus();"(双引号里面的),XXXX表示你那个"时"编辑框控件的ID 3.重写虚函数Pre...

非常想请教一下MFCGridCtrl里面怎么获得已经被选中的行的Index的值,谢 ...
回答:1.GetFocusCell()的函数获取当前光标所选的表格对象,你用这个函数可以得到CCellID的对象,然后取CCellID对象的公共成员变量row和col就行了。 例如 int nRow = m_Grid.GetFocusCell().row; 2.而且在CGridCtrlDemoDlg也展示了另一种方法,你查找下面的代码 void CGridCtrlDemoDlg::OnGridRClick(N...

mfc创建一个死循环线程时。对话框会被占用。刚点到对话框编辑控件上...
因为如果工作和界面合用同一个线程的话,一个函数(例如上面的某个事件处理程序)工作量很大,很长时间都运行不完的话会一直占用界面线程,界面会一直是卡死的,不能操作,自然也就没法点击第二个按钮。

MFC 自定义光标的问题
BOOL CDialog1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {if(pWnd==this){SetCursor(myCursor);return TRUE;}elsereturn CDialog::OnSetCursor(pWnd, nHitTest, message);}pWnd==this说明鼠标不在任何控件上,如果希望在控件上也变成统一光标,函数中只保留if内的部分即可。

mfc默认光标怎么去除
mfc默认光标去除步骤:1、打开mfc,右键控件,选择添加事件处理程序;2、类列表选择主类,消息类型选择EN_SETFOCUS,然后点击确定;3、在生成的程序中使用HideCaret函数处理掉光标即可。mfc是微软公司提供的一个类库。

相似回答