dc.rectangle?vc rectangle?rectangle2d?MFC的几个基本问题总结

电脑杂谈  发布时间:2016-10-26 09:02:20  来源:网络整理

你是否正在寻找关于dc.rectangle的内容?让我把最内涵的东西奉献给你:

MFC的几个基本问题总结


坐标问题

Dc的函数都是逻辑坐标,最终显示的坐标都是设备坐标,。

OnMouseMove(UINT nFlags, CPoint point)这里面的坐标值是 设备坐标

(1)

CRect rect(0, 0, 200, 200);

dc.rectangle(rect);

上面的语句在屏幕的最左上角绘制一个正方形;(因为此时逻辑坐标与设备坐标没有偏移)

(2)

dc.SetViewportOrg(100, 100); //设置设备坐标(视口)原点

CRect rect(0, 0, 200, 200);

dc.rectangle(rect);

最终我们在显示器上看到的会是一个向右下方偏移(100, 100)的一个边长为200的正方形

因为公式为(X-窗口坐标原点)*比例因子+视口坐标原点

因为这里没有比例因子转换,所以公式就是: x – 逻辑坐标原点 + 设备坐标原点。

即 0 – 0 + 100 = 100为最终显示的设备坐标位置

(3)

dc.SetWindowOrg(100, 100);//设置窗口(逻辑坐标)原点位置

CRect rect(0, 0, 200, 200);

dc.rectangle(rect);

最终我们在显示器上看到的会是一个只有1/4个大小的矩形的一部分(事实上相当于向左上方偏移(100, 100)的一个边长为200的正方形

同理0 – 100 + 0 = -100

单文档,当没有按下滚动条时,逻辑坐标和设备坐标是在同一点(0.0)当下拉滚动条的时候,逻辑坐标一直还是0,0但是设备坐标是相对于VIEW的左上角,这样就会变成(0,-150)的形式。 所以如果这时我们在view上按一下,点击事件是保存的逻辑坐标,架设我们保存的200,200这样我们重绘的时候要把屏幕的逻辑坐标变为设备坐标,公式就是 :设备坐标y=200-0+(-150)=50 也就是说真正画图的位置是在设备坐标 200,50 了(其实这个200.50 就和逻辑坐标200.50是一样的,想想是不是??)。 注意:如果不重绘,就不会调用一个系统函数去计算设备坐标原点值,这样设备坐标还是等于逻辑坐标都为0,0

消息问题

Sdk注册窗口类,注册窗口,设置消息响应函数,启动消息队列。

一个MFC程序就只有一个消息处理函数,也就是说一个MFC中所有的窗口(例如单文档中的cview,点击出来的对话框)都是用同一个消息处理函数WindowPro来处理的。(但是事实上,每个窗口都可以有一个自己的窗口处理函数)

MFC程序在开始的时候就只有一个主线程,主线程里会启动消息队列(只运行一次,也就是MFC也只有一个消息队列,一个线程也只能处理一个消息队列)

posted @

以上就是关于dc.rectangle的全部内容,相信你一定会非常满意。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shenmilingyu/article-19467-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...