关于paint的简单问题,急等解答,谢谢

arfu 2000-08-01 05:13:00
关于CPaintDC类,书中介绍:

一个CPaintDC对象只在响应一个WM_PAINT消息的时候被使用,
通常是在你的OnPaint消息处理成员函数中。

WM_PAINT消息和OnPaint(),和CPaintDC类有什么关系?

请详细讲一下


谢谢解答
...全文
200 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
元明 2000-09-07
  • 打赏
  • 举报
回复
在这里我想给你一个详细的答复:
设备描述表(DC)其实就是一个属性集,有了它程序员就可以自如的在客户区上绘图了,一般情况下DC中的属性已由Windows缺省配置,但我们也可调用MFC成员函数来改变设置.
MFC库从总的CDC类中派生出了几个具体的设备描述表类,如下:
CClientDC:提供对窗口客户区的图形访问,但对WM_PAINT消息除外.
CMetaFileDC:Windows元文件,可以利用元文件来存储图像的对象,想要创建独立的设备文件时可以使用此DC类.
CPaintDC:创建响应WM_PAINT消息的描述表.我们可以使用此DC来更新客户区,一般都在CView中的OnDraw()中使用.
CWindowDC:在整个窗口中绘图的DC.
在win32中,响应WM_PAINT消息重绘时是利用BeginPaint(),如下:
switch(message) {
case WM_PAINT:
hDC = BeginPaint(hwnd, &paintStruct);
//own function
EndPaint(hwnd, &paintStruct);
return 0;
}

但在MFC程序中,它自动调用了BeginPaint()和EndPaint()函数,我们没有必要去建立一个CPaintDC对象,MFC已经完全控制了.如下:
CMyAppView::OnDraw(CDC* pDC)
{
CMyAppDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

pDC -> Ractangle(10,20,300,250);
}
pDC就是CPaintDC类的实例指针.
U皮特U 2000-09-07
  • 打赏
  • 举报
回复
当窗口需要重绘时,系统会自动发送WM_PAINT消息;如果你需要立即重绘窗口时也可以自己发送WM_PAINT消息触发重绘事件。
OnPaint()是响应WM_PAINT消息的事件处理函数,当有WM_PAINT消息时会自动调用该函数,可以将重绘的指令放在这个函数里。
CPaintDC是为了简化编程而对CDC的派生类,主要是自动调用了BeginPaint()和EndPaint(),还提供了窗口句柄m_hWnd成员变量以及一个PAINTSTRUCT结构的m_ps成员变量,该结构中包含HDC,重绘区域、是否重绘背景标志等。
arfu 2000-09-06
  • 打赏
  • 举报
回复
?
hand 2000-08-04
  • 打赏
  • 举报
回复
WM_PAINT is sent out when your window needs to be repaint.
OnPaint is the function respond to WM_PAINT in MFC architecture
CPaintDC is a class wrap the DC operation for you OnPaint function
arfu 2000-08-04
  • 打赏
  • 举报
回复
?

16,466

社区成员

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

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

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