⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_43738.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:43738 发表者:hack_bird 发表日期:2003-06-13 12:51:36
<br>主题:在线求救,菜鸟问题:关于OnPaint()
<br>内容:OnPaint()<BR><BR>{<BR>................<BR>pWnd-&gt;Invalidate();<BR>pWnd-&gt;UpDateWindow();<BR>.............<BR>}既然pWnd-&gt;UpDateWindow()发出WM_PAINT消息,那就是调用OnPaint(),这样岂不是陷入死循环?可是我在调试时,并非如此,而且只调用了一次!<BR>请问到底是怎么回事?我觉得他会陷入死循环的呀<BR>,请解释一下调用过程!<BR><BR><BR><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>
回复者:擎天柱 回复日期:2003-06-13 14:05:07
<br>内容:OnPaint()<BR><BR>{<BR>................<BR>Invalidate();<BR>UpDateWindow();<BR>.............<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>回复者:shenjie 回复日期:2003-06-13 15:13:29
<br>内容:是的,在你贴的代码中是向pWnd发送了WM_PAINT消息,不会再次调用这个函数
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hack_bird 回复日期:2003-06-13 19:07:01
<br>内容:谢谢楼上的朋友,我终于明白了一点,顺便再问一下hhj_ISEE,向pWnd发送了WM_PAINT消息,就是说只重画pWnd了,可是为什么这两行代码必须放在绘画函数的前面?放在后面就达不到效果的,真的很郁闷!<BR>也很谢谢davidbao擎天柱 ,你说的的确是死循环!我在论坛里经常看到你的铁子,你一定很棒了!<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><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>
回复者:shenjie 回复日期:2003-06-13 20:51:46
<br>内容:理论上只要放在同一个函数内部是不应该有区别的,因为对于单线程的程序,必须完成一个消息处理函数后才能再接收消息,也就是说不管你写在绘图代码前还是之后,如果不能就应该都不能,可以就是都可以。因为不清楚你的pWnd和调用这个OnPaint的窗口之间的关系,所以我现在也不能确定是什么问题。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:hack_bird 回复日期:2003-06-16 20:21:47
<br>内容:void ObjectCordinateDlg::OnPaint() <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CString str;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LONG i;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CPaintDC dc(this); // device context for painting<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CWnd* pWnd = GetDlgItem(IDC_COORDINATE);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect* lpRect=new CRect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pWnd-&gt;GetClientRect(lpRect);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete lpRect<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC* pDC = pWnd-&gt;GetDC();<BR>&nbsp;&nbsp;&nbsp;&nbsp;//下面两个函数放在<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pWnd-&gt;Invalidate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;pWnd-&gt;UpdateWindow();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;Rectangle(0,0,136,102);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 创建画笔对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen* pPenRed = new CPen;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 红色画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;pPenRed-&gt;CreatePen(PS_SOLID,1,RGB(255,0,0));<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 创建画笔对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen* pPenBlue = new CPen;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 蓝色画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;pPenBlue-&gt;CreatePen(PS_SOLID,1,RGB(0,0, 255));<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 创建画笔对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen* pPenGreen = new CPen;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 绿色画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;pPenGreen-&gt;CreatePen(PS_DOT,1,RGB(0,255,0));<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 选中当前红色画笔,并保存以前的画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;CGdiObject* pOldPen = pDC-&gt;SelectObject(pPenRed);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 绘制坐标轴<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(10,10);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 垂直轴<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(10,90);<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 水平轴<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(130,90);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(m_Extraction)//在坐标系中打出点<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pDC-&gt;Ellipse((m_x*3/8)-5,(m_x*3/8)-5,(m_x*3/8)+5,(m_x*3/8)+5);<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 恢复以前的画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SelectObject(pOldPen);&nbsp;&nbsp;&nbsp;&nbsp;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// 删除新的画笔<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete pPenRed;<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete pPenBlue;<BR>&nbsp;&nbsp;&nbsp;&nbsp;delete pPenGreen;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //与放在此处比较<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pWnd-&gt;Invalidate();<BR>&nbsp;&nbsp;&nbsp;&nbsp;pWnd-&gt;UpdateWindow();<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;// Do not call CDialog::OnPaint() for painting messages<BR>&nbsp;&nbsp;&nbsp;&nbsp;<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>
回复者:hack_bird 回复日期:2003-06-16 20:27: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>
回复者:hack_bird 回复日期:2003-06-16 20:31:04
<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>
回复者:hack_bird 回复日期:2003-06-16 20:31:50
<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>
回复者:hack_bird 回复日期:2003-06-16 20:37:31
<br>内容:而且经过试验,紧挨着pDC-&gt;Rectangle(0,0,136,102);而且放在她前面是能正常工作的最后位置,即越过这个函数再往后就出现闪烁现象
<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 + -