MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。

MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。,第1张

有现成的ScreenToClient函数,你可以百度搜一下。

例:

void CTest25Dlg::OnButton1()

{

CRect r(0,0,100,100);

CPoint pt(0,0);

ScreenToClient(&r);

ScreenToClient(&pt);

}

执行下面的两行后,r,pt的值变成了相对对话框左上角的值

应该是你坐标转换的问题。你把画图的坐标值 用日志记录下(或者直接messagebox打印也行)。

如果你流程上没有问题的话,应该就是 ClientToScreen()

ClientToScreen()的问题。

日志记录下画图的坐标值是查找问题最直接的方法。

cpoint

酣窢丰喝莶估奉台斧郡pt;

::getcursorpos(&pt);

这样就可以得到当前鼠标的位置了,(ptx,pty)。

要获得鼠标点击时的坐标不用自己获得的,mfc的消息映射函数的参数中有鼠标位置的这个参数的。

//在对话窗标题处实时显示客户区内鼠标的坐标

void CTestDlg::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CString str;

strFormat("X:%d  Y:%d", pointx, pointy);   //格式化鼠标坐标点信息并保存到CString型变量str中

SetWindowText(str);    //更新程序窗口Edit控件文本

CDialog::OnMouseMove(nFlags, point);

}

//单击鼠标时,显示鼠标在客户区内的坐标

void CTestDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

CString str;

strFormat("x = %d, y = %d", pointx, pointy);

AfxMessageBox(str,MB_ICONQUESTION);

CDialog::OnLButtonDown(nFlags, point);

}

窗口上相应WM_MOUSEMOVE消息

编写消息相应函数就行了,“鼠标移动坐标的返回”啥意思?

OnMouseMove函数的参数CPoint pt就是鼠标在当前窗口客户区的坐标了。

还可以使用 GetCursorPos(&ptScreen);ScreenToClient(&ptScreen);

来获取鼠标光标的坐标。

文字显示 TextOut();

对话框坐标可以使用GetWindowRect获取。

鼠标坐标一般在OnMouseMove里面通过参数获取。

这个最好有具体需求描述,因为获取方式很多,用于不同的窗口和不同的需要。

以上就是关于MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。全部的内容,包括:MFC中,我能过GetCursorPos()来获取鼠标当前的屏幕坐标,但是我想获取当前窗口的坐标。、MFC鼠标左键如何获得坐标、如何获取鼠标点击的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存