大哥们求助:MFC中OnLButtonDown响应函数中,鼠标左键单击的点(point)的坐标是物理坐标还是逻辑坐标啊?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大哥们求助:MFC中OnLButtonDown响应函数中,鼠标左键单击的点(point)的坐标是物理坐标还是逻辑坐标啊?相关的知识,希望对你有一定的参考价值。

大哥们,MFC中,有个简单的问题一直困扰着我,希望大虾们帮帮我,Q:在OnLButtonDown响应函数中,鼠标左键单击的点(point)的坐标是物理坐标还是逻辑坐标啊?我用AfxMessageBox显示出来怎么point.x和point.y都是0啊!!!!!

一般是以窗口左上角为原点的坐标,不是屏幕坐标。如果用AfxMessageBox显示出来都是0,说明你使用AfxMessageBox的方式不对。 参考技术A 请先查看下你用MessageBox获得x,y的坐标是不是鼠标左键的point,最好能贴出相关代码,以方便分析

MFC画线功能总结

MFC画线功能要点有二:其一,鼠标按下时记录初始位置为线的起始端点,其二,利用不同的方法实现画线。下面着重学习总结画线功能实现方法。

  在OnLButtonDown函数中记录起始端点,CPoint m_ptOrigin = point;

  在OnLButtonUp函数中实现画线。方法如下:

  画线方法一:利用SDK全局函数实现视图窗口画线功能

//获取设备描述表
HDC hdc;
//调用全局函数获得当前窗口的设备描述表,CWnd::m_hWnd根据继承原理,CDrawView继承了CWnd类的数据成员
hdc = ::GetDC(m_hWnd);
//移动到线条的起点
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);//第四个参数用于保存鼠标移动前的位置,此处不需要,设为NULL
//画线
LineTo(hdc,point.x,point.y);
//释放设备描述表
::ReleaseDC(m_hWnd,hdc);

画线方法二:利用MFC的CDC类实现画线功能

//说明:CDC类封装了所有与绘图相关的操作
CDC* pDC = GetDC();//定义CDC类型的指针,利用CWnd类的成员函数GetDC获得当前窗口的设备描述表对象的指针
pDC -> MoveTo(m_ptOrigin);//利用CDC类的成员函数MoveTo和LineTo完成画线功能
pDC -> LineTo(point);
ReleaseDC(pDC);

画线方法三:利用CClientDC类

//说明:此类派生于CDC类,在构造时调用GetDC()函数,在析构时调用ReleaseDC()函数,因此无需显示调用这两个函数。
//CClientDC dc(this);//在当前视图窗口画线方法
CClientDC dc(GetParent());//获取当前视图窗口的父窗口,可以在父窗口画线
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

画线方法四:利用CWindowDC类
//CWindowDC dc(this);//只能在视类中画线
CWindowDC dc(GetParent());//可以在父窗口中画线
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

如果我们要更多功能的绘制方法,可以利用更多的资源和方法,如:

更多方法之:绘制彩色线条(设备描述表中默认有一个黑色画笔)

CPen pen(PS_SOLID,5,RGB(255,255,0));//创建画笔对象
CClientDC dc(this);
CPen* pOldPen = dc.SelectObject(&pen);
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);

更多方法之:使用画刷绘图
//创建一个红色画刷
CBrush brush(RGB(255,0,0));
//创建并获得设备描述表
CClientDC dc(this);
//用红色画刷填充鼠标拖动过程形成的矩形区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);

更多方法之:位图画刷

//创建位图对象
CBitmap bitmap;
//加载位图资源
bitmap.LoadBitmapW(IDB_BITMAP1);
//创建位图画刷
CBrush brush(&bitmap);
//创建并获得设备描述表
CClientDC dc(this);
//用位图画刷填充鼠标拖动过程形成的矩形区域
dc.FillRect(CRect(m_ptOrigin,point),&brush);

先介绍这么多吧,这些都是我的学习总结,如果有疑问,可以联系[email protected]

以上是关于大哥们求助:MFC中OnLButtonDown响应函数中,鼠标左键单击的点(point)的坐标是物理坐标还是逻辑坐标啊?的主要内容,如果未能解决你的问题,请参考以下文章

求助关于MFC的拖拽消息

MFC如何实现鼠标拖拽?

MFC画线功能总结

MFC 鼠标事件

MFC 打开大文档

MFC之实现无边窗口移动