📄 subject_37663.htm
字号:
<p>
序号:37663 发表者:Rikcuo Akira 发表日期:2003-04-27 00:37:55
<br>主题:OnDraw & OnPaint
<br>内容:CView::OnDraw<BR>CWnd::OnPaint<BR><BR>兩者有何不同??<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:dr0 回复日期:2003-04-27 01:14:24
<br>内容:refer: MFC SRC
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:littlestupid 回复日期:2003-04-27 07:50:45
<br>内容:作者:雷神<BR>主页:http://www.ai361.com<BR><BR>OnDraw()和OnPaint()有什么区别呢?<BR>首先:<BR>我们先要明确CView类派生自CWnd类。而OnPaint()是CWnd的类成员,同时负责响应WM_PAINT消息。OnDraw()是CVIEW的成员函数,并且没有响应消息的功能。这就是为什么你用VC成的程序代码时,在视图类只有OnDraw没有OnPaint的原因。<BR><BR>其次:<BR>我们在第《每天跟我学MFC》3的开始部分已经说到了。要想在屏幕上绘图或显示图形,首先需要建立设备环境DC。其实DC是一个数据结构,它包含输出设备(不单指你17寸的纯屏显示器,还包括打印机之类的输出设备)的绘图属性的描述。MFC提供了CPaintDC类和CWindwoDC类来实时的响应,而CPaintDC支持重画。<BR><BR>当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows 将 WM_PAINT 消息发送给它。该视图的 OnPaint 处理函数通过创建 CPaintDC 类的DC对象来响应该消息并调用视图的 OnDraw 成员函数。通常我们不必编写重写的 OnPaint 处理成员函数。<BR><BR>///CView默认的标准的重画函数<BR>void CView::OnPaint()<BR>{<BR> CPaintDC dc(this);<BR> OnPreparDC(&dc);<BR> OnDraw(&dc); //调用了OnDraw<BR>}<BR><BR>既然OnPaint最后也要调用OnDraw,因此我们一般会在OnDraw函数中进行绘制。下面是一个典型的程序<BR><BR>///视图中的绘图代码首先检索指向文档的指针,然后通过DC进行绘图调用。<BR>void CMyView::OnDraw( CDC* pDC )<BR>{<BR> CMyDoc* pDoc = GetDocument();<BR> CString s = pDoc->GetData(); // Returns a CString<BR> CRect rect;<BR><BR> GetClientRect( &rect );<BR> pDC->SetTextAlign( TA_BASELINE | TA_CENTER );<BR> pDC->TextOut( rect.right / 2, rect.bottom / 2, <BR> s, s.GetLength() );<BR>}<BR><BR>最后:<BR>现在大家明白这哥俩之间的关系了吧。因此我们一般用OnPaint维护窗口的客户区(例如我们的窗口客户区加一个背景图片),用OnDraw维护视图的客户区(例如我们通过鼠标在视图中画图)。当然你也可以不按照上面规律来,只要达到目的并且没有问题,怎么干都成。<BR><BR>补充:<BR>我们还可以利用Invalidate(),ValidateRgn(),ValidateRect()函数强制的重画窗口,具体的请参考MSDN吧。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -