关于CDC的问题?
1. 在对话框应用程序中的OnPaint函数中进行绘图操作使用哪种类型的DC? 是CDC? CClientDC?CPaintDC? CWindowDC?
2. 在OnPaint中,CClientDC的绘图区域中窗口客户区,CWindowDC的绘图区域是窗口。但是CDC,
CPaintDC的绘图区域是什么?
3. 看到一本书上说OnPaint中只能用CPaintDC进行绘图?因为只有它才能删除消息队列中的WM_PAINT消息;其它的不能删除之,这样会引起窗口不停的重绘。这种说法正确吗?
4. 有些自绘标题栏的应用程序(如金山毒霸),是对有标题栏的对话框中的标题栏进行绘图,还是对没有标题栏(属性中去掉标题栏属性)的对话框客户区进行绘图,用图片模拟出标题栏?哪种方法好一些?
问题点数:50、回复次数:3Top
1 楼soaroc(会飞的猪)回复于 2006-05-02 15:33:37 得分 50
CDC是应用程序关于绘图的基类。MFC从其中派生出了三个具体的类:CClientDC CPaintDC及CWindowDC,三者的区别在于:
CWindowDC允许在显示器的任何位置绘图,坐标(0,0)表示整个屏幕的左上角,一般在CMainFrame中调用;
CClientDC指能够在窗口的客户区绘图,坐标(0,0)表示用户区的左上角。如在视类中绘图,则不包含窗口的边框,菜单栏和标题栏,状态栏;如果在对话框中绘图,则不包含对话框的边框和标题栏;如果在控件中绘图,则不包含控件的边框,一办在View中使用;
CPaintDC只在窗口的OnPaint函数中使用。OnPaint函数首先构造一个CPaintDC对象,在调用OnPrepareDC函数将其准备好,最后一这个准备好的CPaintDC对象指针为参数,来调用OnDraw函数进行绘图操作。CPaintDC比较的特殊。他的构造函数和析构函数都是针对OnPaint进行的,因此在OnDraw函数中的代码可以使用于任何的输出设备。另外,CPaintDC的构造函数会自动地调用BeginPaint函数,而析构函数会自动地调用EndPaint函数。
一般来说:CClientDC和CPaintDc比较的常用,CClientDC用于在客户区内绘图;CPaintDC用在OnPainth函数中,为OnDraw函数准备设备环境;
不知道上面有没有解释清楚,
另:后面的一种是一般的方法,这种方法的自由度较大,可以实现各种效果。Top
2 楼email_jhb()回复于 2006-05-02 20:05:28 得分 0
upTop
3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-05-02 20:12:18 得分 0
楼主,为何不多读一下MSDN?Top




