subject_17100.htm

来自「一些关于vc的问答」· HTM 代码 · 共 144 行 · 第 1/2 页

HTM
144
字号
<p>
序号:17100 发表者:liuwenjun 发表日期:2002-10-08 14:32:15
<br>主题:关于动画的请教
<br>内容:请哪位高手帮忙分析一下下面的代码(OnTimer函数中的)在对话框中画动画为何出现下面的结果:开始几下正常(红线出来后就隐没,然后再出来。。),但用不了几次后所画线的上面一部分就不动了,而且如果下次画的线与此部分有重叠的话,重叠部分不显示(其中CurHeightArray数组是我用随机数生成的int数组)。而且当SetTimer(1,500,NULL)时,每次显示的图形都不一样,但若SetTimer(1,100,NULL)时,就有几次显示的是一样的。当我把擦线代码放于画线代码前时,就无动画,而是出现10条黑红色的一样长度的线。<BR>&nbsp;&nbsp;&nbsp;&nbsp;CDC *pDC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC=GetDC();<BR>CPen mypen,*pOldPen;<BR>&nbsp;&nbsp;&nbsp;&nbsp;mypen.CreatePen(PS_SOLID,5,RGB(192,63,63));<BR>// 创建一个红色的补色(要实现红色就要定义其补色的画笔??)实线&nbsp;&nbsp;&nbsp;&nbsp;pOldPen=pDC-&gt;SelectObject(&mypen);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;BeginPath();<BR>&nbsp;&nbsp;&nbsp;&nbsp;int m_pointx,m_pointy;//用来标志画线的起始点<BR>&nbsp;&nbsp;&nbsp;&nbsp;int i=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pointx=rect.left=20;//rect是客户区矩形<BR>&nbsp;&nbsp;&nbsp;&nbsp;m_pointy=rect.bottom-60;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;10;i++)//画10条线<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(m_pointx+15*i,m_pointy);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(m_pointx+15*i,CurHeightArray[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;10;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PreHeightArray[i]=CurHeightArray[i];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>pDC-&gt;SetROP2(R2_NOTXORPEN);//设置画图模式&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt;10;i++)//重画这10条线,以将其擦去<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(m_pointx+15*i,m_pointy);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(m_pointx+15*i,PreHeightArray[i]);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:luo 回复日期:2002-10-08 14:42:30
<br>内容:我觉得应该先擦除以前的线,然后在话新的线。还有个问题就是我以前设置画图模式的时候用的是R2_NOT模式,不知道对你是不是有帮助。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:luo 回复日期:2002-10-08 14:49:05
<br>内容:还有不知道你的代码是不是拷完了,我发现你用了BeginPath()方法。但是你没有用EndPath()方法。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:liuwenjun 回复日期:2002-10-08 14:55:06
<br>内容:R2_NOT模式我也用过,但结果是仅出现黑色的线的动画,而不是我想要的红色线。而且,我在理论上想的也是象您一样,先擦除以前的线——也就是我前面说的“把擦线代码放于画线代码前”,但结果是“就无动画,而是出现10条黑红色的一样长度的线”,我就是想不明白这里是怎么回事。不知您是怎样想的?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:liuwenjun 回复日期:2002-10-08 14:56:55
<br>内容:啊,不好意思,我用了BeginPath()方法,但代码没拷进去。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:luo 回复日期:2002-10-08 15:07:53
<br>内容:你说的有道理,是应该用你选的模式,我建议你这样试一下,还是把擦线的部分放到前面去,但是在话新的线之前在设置一遍模式,这次用R2_NOP或许能行。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:liuwenjun 回复日期:2002-10-08 15:32:07
<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>
回复者:徐景周 回复日期:2002-10-08 15:44:30
<br>内容:可试下面方法绘制:<BR>//绘制聚焦矩形(逻辑坐标)<BR>void DrawFocusRect(CDC* pDC, const CRect& rect)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen&nbsp;&nbsp;&nbsp;&nbsp;pen(PS_DOT, 0, RGB(0,0,0));<BR>&nbsp;&nbsp;&nbsp;&nbsp;CPen*&nbsp;&nbsp;&nbsp;&nbsp;pOldPen = pDC-&gt;SelectObject(&pen);<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nOldMode = pDC-&gt;SetROP2(R2_NOTXORPEN);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;MoveTo(rect.left, rect.top);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 绘制矩形框<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(rect.right,rect.top);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(rect.right,rect.bottom);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(rect.left, rect.bottom);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;LineTo(rect.left, rect.top);<BR>&nbsp;&nbsp;&nbsp;&nbsp;// 恢复CDC对象<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SetROP2(nOldMode);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;SelectObject(pOldPen);<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>
回复者:luo 回复日期:2002-10-08 15:47:19
<br>内容:你把那两句BeginPath和EndPath去掉试一下。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:liuwenjun 回复日期:2002-10-08 21:23:39
<br>内容:我试了两位的方法:<BR>1我用徐老师的DrawFocusRect函数(我将他加为对话类的成员函数,然后在OnTimer函数中调用他),结果编译时出错:<BR>error C2039: 'DrawFocusRect' : is not a member of 'CAnimateDlg'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d:\myprojects\animate\animatedlg.h(14) : see declaration of 'CAnimateDlg'<BR>Error executing cl.exe.<BR>2将BeginPath和EndPath去掉后,成了白色线的动画;<BR>另外,我还试了这个方法:先画线,画完线后再用下面语句 <BR>&nbsp;&nbsp;pDC-&gt;SelectStockObject(GRAY_BRUSH);<BR>&nbsp;&nbsp;&nbsp;&nbsp;pDC-&gt;Rectangle(m_pointx,rect.top,rect.right-1,rect.bottom-60);<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>
回复者:黄飚 回复日期:2002-10-08 21:31:56
<br>内容:我提一下,任何对UI的化图,我建议在OnDraw()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>
回复者:黄飚 回复日期:2002-10-08 21:33:49
<br>内容:在OnTimer里调用<BR><BR>CWnd::Invalidate<BR>void Invalidate( BOOL bErase = TRUE );<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?