关于MFC中设备环境对象CDC的一些浅显的问题

CDC是一种很特殊的类小弟初学还有点不是很明白CDC常用的有CWindowDCCClientDC和CPaintDCCPaintDC的构造函数和析构函数分别调用了Begin... CDC是一种很特殊的类 小弟初学 还有点不是很明白
CDC常用的有CWindowDC CClientDC 和 CPaintDC
CPaintDC的构造函数和析构函数分别调用了BeginPaint()和EndPaint()

问题1是:这个EndPaint()不仅要析构CDC对象 还要结束清楚消息队列中的WM_PAINT消息 请问是不是当窗口需要重绘的时候 windows会不断的发送很多WM_PAINT消息啊(不是就发一个) 不然怎么会需要清楚消息队列中的WM_PAINT 那windows什么时候停止发送WM_PAINT呢?

CWindowDC是获得一个窗口而不是客户区的设备环境的类
问题2:那么请问在这个DC中 坐标(0,0)代表的是相应窗口的左上角(就是那个标题栏的左上角)还是整个屏幕(就是液晶屏幕)的左上角啊?

CClientDC是一个获得相应窗口客户区的设备环境的类 它的构造函数调用GetDC(),而析构函数调用ReleaseDC()
问题3:这个DetDC()如何保证得到的就是一个客户区的DC呢 为什么就不是窗口DC呢 难道对GetDC()的定义就是获得一个客户区的DC嘛? 抱歉 我对这个不是很了解

问题4:我在书上看到一句话 原文是:“我们要记住,视图窗口没有非客户区域,因此CWindowDC更适合框架窗口,而不是视图窗口”
这个我又迷糊了 什么是视图窗口?CView对象代表的那个窗口是没有非客户区的?而那个最大的框架窗口是CMDIFrameWnd对象是有的 是这个意思吗?每个CView外面包的一个框架窗口对象是一个CMDIChildWnd对象才拥有每个子窗口的非客户区?是不是我理解的这样

请高手指教 如果有菜鸟的地方 请不要笑话我 我很笨 尽量用通俗的话 不要复制一大段术语过来 好吗 我肯定会追加分数的
PS 如果我在非客户区乱涂乱画 是不是那些工具栏 菜单栏 甚至标题栏都会被我“涂鸦”呢?那我点击那些地方 会不会就没有作用了?
展开
 我来答
6908270270
2009-03-05 · TA获得超过3427个赞
知道小有建树答主
回答量:1988
采纳率:0%
帮助的人:705万
展开全部
1
只要存在无效域就会重画,就有WM_PAINT ,EndPaint()作用就是消除无效域,
WM_PAINT 消息优先级别很低,系统会将几个WM_PAINT 无效域叠加,
2
Windows系统最常见的程序,由两个窗口组成,一个是主窗口,一个是视图窗口,就是记事本中间白色的部分,
视图窗口在前,盖住了主窗口,而菜单标题栏却没有被盖住,所以你看到大部分的是视图窗口
CWindowDC获得的是标题栏左上角,CClientDC是获得视图窗口,就是记事本中间白色的左上角
GetDC()是根据类来的,主窗口获得WindowDC

是不是那些工具栏 菜单栏 甚至标题栏都会被我“涂鸦

是的,但是其他地方却不行

原因是 视图窗口在前,盖住了主窗口
80676535
2009-03-02 · TA获得超过477个赞
知道小有建树答主
回答量:1316
采纳率:0%
帮助的人:878万
展开全部
问题1
只要被盖住,就要重画,就发一个WM_PAINT

问题2
CWindowDC 包括 由CClientDC+标题栏; CClientDC 标题栏以下部分; CPaintDC 是CClientDC的真子集,且是无效的区域,重新绘制时要用到BeginPaint,EndPaint.如果往一个对话框上绘整个客户区大小的图应该可以用CClientDC,如果小于整个客户区请用CPaintDC

问题3
GetDC()是CWnd类的一个方法,你要注意一下你使用的类都是继承CWnd类的.
直接使用GetDC()相当于this->GetDC();

视图窗口...就是多文档的,框架窗口..是对话框的,
文档的的子文档是可以移动的,位置就不适合用CWindowDC来得到.不然很容易画到外面去..对话框的就固定了,标题栏就那么高..

你非客户区乱涂乱画...还是会被刷回来的,结果就是没效果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
178752468
2009-03-03 · TA获得超过291个赞
知道小有建树答主
回答量:517
采纳率:0%
帮助的人:396万
展开全部
1: 在需要重绘的时候就会发,如窗口缩放,遮盖等
2: 代表响应窗口的左上角(含标题栏)
3: GetDc只得到给定窗口的客户区,得到窗口整个用GetWindowDc
4:视图窗口 就是指的CView客户区窗口
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式