有现成的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鼠标左键如何获得坐标、如何获取鼠标点击的坐标等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)