📄 subject_41424.htm
字号:
<p>
序号:41424 发表者:titany 发表日期:2003-05-27 00:04:32
<br>主题:UpdateWindow()让我迷惑(附代码)
<br>内容:void CEx06aDialog::OnPaint() <BR>{<BR> CPaintDC dc(this); // device context for painting<BR> <BR> // TODO: Add your message handler code here<BR> CWnd* pWnd=GetDlgItem(IDC_1);<BR> <BR> CDC* pDC=(CDC*)pWnd->GetDC();<BR> CRect rect;<BR> pWnd->GetClientRect(&rect);<BR> pDC->SelectStockObject(BLACK_BRUSH);<BR><BR> pWnd->UpdateWindow();<BR> //为什么要放在Rectangle的前面?我试过放在<BR> //该句后面的话静态控件就不显示绘制的内容了<BR><BR> pDC->Rectangle(&rect); <BR> <BR> pWnd->ReleaseDC(pDC);<BR><BR> // Do not call CDialog::OnPaint() for painting messages<BR>}
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:titany 回复日期:2003-05-27 11:21:42
<br>内容:somebody help me!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:titany 回复日期:2003-05-28 00:02:54
<br>内容:顶~
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zojd1 回复日期:2003-05-28 01:02:05
<br>内容:看看这个不知对你有没有用:<BR>http://www.china-askpro.com/msg13/qa53.shtml
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mimibaby 回复日期:2003-05-28 12:22:06
<br>内容:pWnd->UpdateWindow();//是使你的窗口失效,<BR>所以放后面就不行了<BR>
<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>回复者:卡诶 回复日期:2003-05-28 16:42:12
<br>内容:updatewindow是重画窗口用的,如果有需要画的区域会发出WM_PAINT消息,如果没有那么不会。<BR><BR>原因:<BR>在主对话框的OnPaint的结尾因为IDC_1控件的整个客户区是无效的所以会发出IDC_1控件的WM_PAINT消息, 那么会调用系统的默认方法画控件DefWindowProc(message, wParam, lParam);这样你原来画上去的东西会被覆盖掉,你在前面调用了updatewindow后使无效客户区变的有效,就不会再会发出IDC_1控件的WM_PAINT消息,也不会调用DefWindowProc(message, wParam, lParam)了,所以不会覆盖你画的内容了。<BR><BR>其实还有两种方法可以实现同样的效果<BR>1:拦截住IDC_1的WM_PAINT的消息,不让调用DefWindowProc<BR>LRESULT CMyStatic::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) <BR>{<BR> if( message == WM_PAINT || message == WM_ERASEBKGND || message==WM_NCPAINT)<BR> {<BR> return 1;<BR> }<BR> return CStatic::WindowProc(message, wParam, lParam);<BR>}<BR><BR>2:在主对话框的结尾使IDC_1的客户区有效<BR>CWnd* pWnd=GetDlgItem(IDC_1);<BR>CDC* pDC=(CDC*)pWnd->GetDC();<BR>CRect rect;<BR>pWnd->GetClientRect(&rect);<BR>pDC->SelectStockObjectBLACK_BRUSH);<BR><BR>//pWnd->UpdateWindow();<BR>//为什么要放在Rectangle的前面?我试过放在<BR>//该句后面的话静态控件就不显示绘制的内容了<BR><BR>pDC->Rectangle(&rect);<BR>pWnd->ReleaseDC(pDC);<BR>pWnd->ValidateRect(&rect);<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:幻瞳 回复日期:2003-05-28 18:44:19
<br>内容:请问楼上的大虾怎么看出来他的IDC_1控件的整个客户区是无效的?<BR>教教我啊,我怎么看部出来?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:卡诶 回复日期:2003-05-29 00:05:07
<br>内容:你可以在WM_PAINT中看看要重画的区域,和什么时候到产生WM_PAINT消息。
<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 + -