谁能告诉我OnDraw和OnPaint各自的区别、使用方法以及使用场合。
谢谢!
谢谢!
解决方案 »
- CListCtrl收不到VK_RETURN键值的键盘消息,如何解决?
- UDP的收发程序,开始接收正常,过一会,就提示说sendto: error ,不知都有些什么原因?有没有遇到过类似情况的朋友
- 如何根据本地连接名获得网卡的ip地址以及子网掩码等信息啊?多谢
- 建立了一个win32App,增加了一个堆栈类,声明放在了*.H文件中,相应的函数定义放在了*.cpp文件中,VC总是找不到函数定义
- 怎样得到Modem的ID或句柄?
- 简单问题,我在一个dialog当中,怎么触发view::ondraw??
- 谁有epson控制码的相关资料?100分!。
- 我的作业
- 请问,直接用CRecordset::GetFieldValue()取字段值,为什么只能取到一部分,也就是说只能取877字节???
- 头文件报错怎么办?
- 关于activex中调用dll的问题
- 如何检测内存泄漏?可能是BSTR引起的
区别不大。
要想在屏幕上绘图或显示图形,首先需要建立设备环境DC。其实DC是一个数据结构,它包含输出设备(不单指你17寸的纯屏显示器,还包括打印机之类的输出设备)的绘图属性的描述。MFC提供了CPaintDC类和CWindwoDC类来实时的响应,而CPaintDC支持重画。当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows 将 WM_PAINT 消息发送给它。该视图的 OnPaint 处理函数通过创建 CPaintDC 类的DC对象来响应该消息并调用视图的 OnDraw 成员函数。通常我们不必编写重写的 OnPaint 处理成员函数。///CView默认的标准的重画函数void CView::OnPaint(){ CPaintDC dc(this); OnPreparDC(&dc); OnDraw(&dc); //调用了OnDraw}既然OnPaint最后也要调用OnDraw,因此我们一般会在OnDraw函数中进行绘制。下面是一个典型的程序///视图中的绘图代码首先检索指向文档的指针,然后通过DC进行绘图调用。void CMyView::OnDraw( CDC* pDC ){ CMyDoc* pDoc = GetDocument(); CString s = pDoc->GetData(); // Returns a CString CRect rect;GetClientRect( &rect ); pDC->SetTextAlign( TA_BASELINE | TA_CENTER ); pDC->TextOut( rect.right / 2, rect.bottom / 2, s, s.GetLength() );}
因此我们一般用OnPaint维护窗口的客户区(例如我们的窗口客户区加一个背景图片),用OnDraw维护视图的客户区(例如我们通过鼠标在视图中画图)。当然你也可以不按照上面规律来,只要达到目的并且没有问题,怎么干都成。
建议楼主有空去看看MFC的源代码:)
{
OnDraw();
}如果OnPaint中只有调用OnDraw一个函数,不做其它的,那么OnPaint和OnDraw功能就一样了。为什么多此一举呢,因为在CView的OnPaint中,不仅仅只调用OnDraw,OnPaint还负责打印。
在重画的时候调用OnPaint.再调用 OnPaint的时候调用Ondraw