mfc 获取鼠标坐标 我需要在某个控件内获取 不是整个对话框

mfc 获取鼠标坐标 我需要在某个控件内获取 不是整个对话框,第1张

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获取鼠标位置并显示等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9634972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存