CRect r(0,0,100,100); //控件区域
CPoint pt(0,0);
ScreenToClient(&r);
ScreenToClient(&pt);
使用GetCursorPos()函数
假设是用pciture控件显示。
那么可以先改变控件的ID,然后定义一个CSTATIC 类型的变量如m_ctrlPic。
CPoint point;
GetCursorPos( &point );
然后得到picture控件rect。
CRect rect;
::GetClientRect(m_ctrlPicGetSafeHwnd(), &rect);
然后把当前鼠标坐标转为相对于rect的坐标。
::ScreenToClient(m_ctrlPicGetSafeHwnd(), &point);
然后判断该点坐标是否在rect内,在就显示
if(rectPtInRect(point))
{
CString strPos;
strPosFormat("%d:%d", pointx, pointy);
AfxMessageBox(strPos);
}
}
#include <iostream>
#include <windowsh>
int main()
{
POINT pt;
while(1)
{
GetCursorPos(&pt);//调用API函数
printf("%d,%d\n",ptx,pty);
Sleep(100);
}
return 0;
}
控件不会默认捕获鼠标消息,因此处理代码放在对话框的onlbuttondown这样的鼠标消息中即可。
鼠标消息函数会默认带入鼠标位置,而框的位置可以通过控件变量或指针的getwindowrect获取。
之后通过rectptinrect(point)函数即可判断鼠标是否在上,至于上的具体位置,就需要你通过crect或者crgn来一一记录了(这并不太容易),之后依然是通过ptinrect和crgn的ptinregion来判断是否在区域(这需要一个循环语句)。
至于显示另一个,通过cbitmap导入资源后,就是控件的setbitmap就可以了。
对话框坐标可以使用GetWindowRect获取。
鼠标坐标一般在OnMouseMove里面通过参数获取。
这个最好有具体需求描述,因为获取方式很多,用于不同的窗口和不同的需要。
1在View类里设3个CPoint型变量,oldbegin,oldend用来表示移动过程中,刚才直线所在位置的起点,终点坐标,oldclick用来表示按下鼠标左键时,点击点的坐标
2在LButtonDown响应函数里,令oldclick=point,point是鼠标响应函数是参数
3在MouseMove响应函数里,把原直线擦去(擦去的方法要看你是怎么实现画直线的了,我也不知道你是怎么实现的,你自己分析吧),然后求出新的直线的两点坐标
(oldbeginx+pointx-oldclickx,oldbeginy+pointy-oldclicky),
(oldendx+pointx-oldclickx,oldendy+pointy-oldclicky),
希望对你有帮助
以上就是关于mfc 获取鼠标坐标 我需要在某个控件内获取 不是整个对话框全部的内容,包括:mfc 获取鼠标坐标 我需要在某个控件内获取 不是整个对话框、MFC中,关于得到鼠标在对话框上的坐标值、mfc获取鼠标位置并显示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)