欢迎光临~湖南智能应用科技有限公司-hniat.com
语言选择: 中文版 ∷  英文版

基础知识

MFC 绘图坐标系学习

1、坐标系及其定义
主要为三个坐标系:窗口坐标系、客户区坐标系、屏幕坐标系

窗口坐标系: 以对话框窗口左上角为坐标原点,包括窗口的标题栏、菜单栏、工具栏等。
客户区坐标系: 客户区坐标都必须有一个客户对象,是以客户对象左上角为坐标原点。
              客户对象可以为一个对话框窗口的客户区,也可是某个控件的区域。
屏幕坐标系: 以电脑屏幕左上角为坐标原点,是一个绝对坐标。

2、不同坐标系坐标转换

  坐标系可以相互转换。 如: CPoint point;
  2-1 屏幕坐标系转化为客户区坐标系
                           this->ScreenToClient(&point);(将屏幕坐标系下的点point转换为this客户区坐标系下的点)

                           mPicViemStatic.ScreenToClient(&point)(将屏幕坐标系下的点point转换为mPicViemStatic客户区坐标系下的点)

  2-2 客户区坐标转屏幕 坐标系
            this->ClientToScreen(&point) (将this客户区坐标系下的点point转换为屏幕坐标系下的点)

           mPicViemStatic.ClientToScreen(&point)  (将mPicViemStatic客户区坐标系下的点point转换为屏幕坐标系下的点)

  2-3 不同客户区坐标转换
      需要通过屏幕坐标进行中间转换:

               this->ClientToScreen(&point);(首先将this客户区坐标系下的点 point转换为屏幕坐标系下的迪昂),

               mPicViemStatic.ScreenToClient(&point);(而后将屏幕坐标系下的点point转换为mPicViemStatic客户区坐标系下的点)

              最终得到的point为mPicViemStatic客户区坐标系点

 
3、 常见获得屏幕坐标方式:
    BOOL GetCursorPos(__out  LPPOINT lpPoint); //获取当前鼠标屏幕坐标
    BOOL GetWindowRect(LPRECT lpRect ) const throw(); //如果是在对话框类上用时,lpRect的左上点为窗口最上边,包含窗口的标题栏、菜单栏、工具栏
    mPicViemStatic.GetWindowRect(LPRECT lpRect ); //获取控件mPicViemStatic矩形的屏幕坐标
    
4、 常见获取客户区坐标方法:
    BOOL GetClientRect(__out  LPRECT lpRect); //获取当前客户区矩形
    在鼠标事件响应函数中CPoint point为客户区坐标,如:
        OnMouseMove(UINT nFlags, CPoint point);
        OnLButtonUp(UINT nFlags, CPoint point);
        OnLButtonDown(UINT nFlags, CPoint point);
     至于是那个客户区,看消息定义在哪里。如果是对话框类的消息,则为对话框窗口的客户区。   
 
5、MFC绘图时GetDC()一定确认在那个客户区DC上画
    如 CDC *pDC = mColorPicStatic.GetDC(); 表示绘图是按mColorPicStatic客户区坐标系绘制的。

         CDC *pDC = GetDC();表示在this客户区坐标系绘图。
————————————————
版权声明:本文为CSDN博主「白白皎皎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_20828983/article/details/52275127
关闭
用手机扫描二维码关闭
二维码