win API 中的 getDC 和 BeginPaint 有什么区别?

garfunklett 2005-05-23 08:03:24
为什么在响应WM_PAINT的时候用BeginPaint更好一些?

返回的值都是HDC有什么区别么?
...全文
220 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
garfunklett 2005-05-25
  • 打赏
  • 举报
回复
求啊~~~ 真的 求

大家帮助帮助我吧
garfunklett 2005-05-25
  • 打赏
  • 举报
回复
现在 我明白 beginpaint 和 endpaint 的组合 可以去除WM_PAINT

而 getdc 和 releasedc 就不能

但是 为什么在别的消息循环里面(非WM_PAINT)里面 用beginpaint 和 endpaint 组合来绘图 会出现有时能画出来,有时候花不出来的问题呢?

这一点还是非常不理解~~~~
garfunklett 2005-05-24
  • 打赏
  • 举报
回复
我调用了啊~~~

问题是在别的消息循环里面(非WM_PAINT)里面 写了beginpaint(xxxxxx)
//绘图
endpaint(xxxxx)
会出现不稳定的情况 为什么呢?
OnlyHappy 2005-05-24
  • 打赏
  • 举报
回复
如果你有了beginpaint就要调用一下endpaint.
garfunklett 2005-05-24
  • 打赏
  • 举报
回复
非常不好意思 我还是有点儿不明白:

1,I really called function endpaint in case WM_PAINT:(另外,我问的是在“非”case WM_PAINT中使用BeginPaint绘图,会出现不稳定)

2,你的意思是说,BeginPaint在绘图的时候,把系统为这个窗口保留的绘图信息结果里面的invalidrect都擦去了,而GetDC绘图的时候不会擦去,是这样么?
ipgk 2005-05-24
  • 打赏
  • 举报
回复
现在有2问题:
_____________


1、楼上
2、GetDC可用于非重画消息时的绘图,并非专用于重画消息。
Windows只为每个窗口对象保留一条WM_PAINT消息和一个“绘制信息结果” — PAINTSTRUCT,这个结构内包含有无效矩形区的坐标。当一个窗口对象出现新的无效矩形区时,Windows在向应用程序的消息队列中放置WM_PAINT消息之前,它首先检查在消息队列中是否已存在一条准备发送给该窗口对象的WM_PAINT消息。若该消息存在,Windows将这两条WM_PAINT消息合并为一条WM_PAINT消息。该消息的“绘制信息结构”的无效矩形区将包含原来的两个WM_PAINT消息的无效矩形区。
所以,Windows不将WM_PAINT消息自动去掉,是给你更大的自由,让你将多次的WM_PAINT合并处理,这样你可以控制程序的刷新率等。其他消息自动去掉,是因为没有合并处理的意义。
OnlyHappy 2005-05-23
  • 打赏
  • 举报
回复
do you call endpaint in case wm_paint:
garfunklett 2005-05-23
  • 打赏
  • 举报
回复
我试了试 确实 会有这样的问题 至少不太稳定

现在有2问题:

1,为什么如果在非WM_PAINT消息中 使用 BeginPaint 绘图 也会出现问题(不稳定 有时画得出来 有时不出来)

2,为什么在WM_PAINT消息中 用GetDC绘图不能使WM_PAINT从消息队列中除去呢?运行中的程序只是看到一个case XXXX:就去解决一个消息,为什么还有不从队列中除去的情况?
garfunklett 2005-05-23
  • 打赏
  • 举报
回复
也是 我应该试试

只是 这一块我觉得 问题有点儿多~~~

有点儿乱~~ 都不知道 该从哪儿下手了。
OnlyHappy 2005-05-23
  • 打赏
  • 举报
回复
1楼正解
ipgk 2005-05-23
  • 打赏
  • 举报
回复
你怎么不试试?
garfunklett 2005-05-23
  • 打赏
  • 举报
回复
那么 我在 消息循环中

case WM_PAINT:
//使用getDC进行绘图

难道 不算作 响应WM_PAINT?难道 会产生死循环?
ipgk 2005-05-23
  • 打赏
  • 举报
回复
用BeginPaint才能使WM_PAINT从消息队列里除去,不然会一直引发WM_PAINT消息

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧