📄 subject_43738.htm
字号:
<p>
序号:43738 发表者:hack_bird 发表日期:2003-06-13 12:51:36
<br>主题:在线求救,菜鸟问题:关于OnPaint()
<br>内容:OnPaint()<BR><BR>{<BR>................<BR>pWnd->Invalidate();<BR>pWnd->UpDateWindow();<BR>.............<BR>}既然pWnd->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> CString str;<BR> <BR> LONG i;<BR><BR> CPaintDC dc(this); // device context for painting<BR> <BR> CWnd* pWnd = GetDlgItem(IDC_COORDINATE);<BR><BR> CRect* lpRect=new CRect;<BR> pWnd->GetClientRect(lpRect); <BR> delete lpRect<BR> // 指针<BR> CDC* pDC = pWnd->GetDC();<BR> //下面两个函数放在<BR> pWnd->Invalidate();<BR> pWnd->UpdateWindow();<BR><BR> pDC->Rectangle(0,0,136,102);<BR> <BR> // 创建画笔对象<BR> CPen* pPenRed = new CPen;<BR> <BR> // 红色画笔<BR> pPenRed->CreatePen(PS_SOLID,1,RGB(255,0,0));<BR> <BR> // 创建画笔对象<BR> CPen* pPenBlue = new CPen;<BR> <BR> // 蓝色画笔<BR> pPenBlue->CreatePen(PS_SOLID,1,RGB(0,0, 255));<BR> <BR> // 创建画笔对象<BR> CPen* pPenGreen = new CPen;<BR> <BR> // 绿色画笔<BR> pPenGreen->CreatePen(PS_DOT,1,RGB(0,255,0));<BR> <BR> // 选中当前红色画笔,并保存以前的画笔<BR> CGdiObject* pOldPen = pDC->SelectObject(pPenRed);<BR> <BR> // 绘制坐标轴<BR> pDC->MoveTo(10,10);<BR> <BR> // 垂直轴<BR> pDC->LineTo(10,90);<BR> <BR> // 水平轴<BR> pDC->LineTo(130,90);<BR> <BR> if(m_Extraction)//在坐标系中打出点<BR><BR> pDC->Ellipse((m_x*3/8)-5,(m_x*3/8)-5,(m_x*3/8)+5,(m_x*3/8)+5);<BR><BR><BR> // 恢复以前的画笔<BR> pDC->SelectObject(pOldPen); <BR><BR> // 删除新的画笔<BR> delete pPenRed;<BR> delete pPenBlue;<BR> delete pPenGreen;<BR><BR> //与放在此处比较<BR> pWnd->Invalidate();<BR> pWnd->UpdateWindow();<BR><BR> // Do not call CDialog::OnPaint() for painting messages<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>
回复者: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->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 + -