编程论坛's Archiver

baloja 发表于 2007-3-20 23:34

[讨论]一个非常奇怪的编程问题

<P>一个非常奇怪的编程问题<BR>程序一可以正常显示图形,程序二不能显示图形,程序三又可以正常显示图形了,(三个程序均不存在编译和运行问题)这到底是为什么?百思不得其解,请高手执教。叩谢!<BR>class CMemBitmapView : public CView<BR>{<BR>public:<BR>    CDC *PDC;   //创建屏幕绘图设备指针<BR>    CDC memDC;  //创建内存绘图设备<BR>    CBitmap memBitmap;  //创建内存位图<BR>    CBitmap* pOldBmp;  //创建原始位图指针<BR>    CRect rect;  //创建矩形,用于保存屏幕窗口坐标<BR>public:<BR>    afx_msg void OnHuitu();<BR>public:<BR>    afx_msg void OnTimer(UINT_PTR nIDEvent);<BR>};</P>
<P>程序一<BR>void CMemBitmapView::OnHuitu()<BR>{<BR>    rect.left=0;<BR>    rect.top=0;<BR>    rect.right=1024;<BR>    rect.bottom=768;<BR>    PDC=this-&gt;GetDC();<BR>    memDC.CreateCompatibleDC(PDC); <BR>    memBitmap.CreateCompatibleBitmap(PDC,rect.right,rect.bottom);<BR>    pOldBmp = memDC.SelectObject(&amp;memBitmap);<BR>    memDC.FillSolidRect(rect,RGB(255,255,255));<BR>    memDC.Ellipse(300,150,650,500);<BR>    PDC-&gt;BitBlt(rect.left,rect.top,rect.right,rect.bottom,&amp;memDC,0,0,SRCCOPY);<BR>}<BR>程序二<BR>void CMemBitmapView::OnHuitu()<BR>{<BR>    rect.left=0;<BR>    rect.top=0;<BR>    rect.right=1024;<BR>    rect.bottom=768;<BR>    PDC=this-&gt;GetDC();<BR>    memDC.CreateCompatibleDC(PDC); <BR>    memBitmap.CreateCompatibleBitmap(PDC,rect.right,rect.bottom);<BR>    pOldBmp = memDC.SelectObject(&amp;memBitmap);<BR>    memDC.FillSolidRect(rect,RGB(255,255,255));<BR>    CMemBitmapView::SetTimer(1,100,NULL);<BR>}<BR>void CMemBitmapView::OnTimer(UINT_PTR nIDEvent)<BR>{<BR>    memDC.Ellipse(300,150,650,500);<BR>    PDC-&gt;BitBlt(rect.left,rect.top,rect.right,rect.bottom,&amp;memDC,0,0,SRCCOPY);<BR>    CView::OnTimer(nIDEvent);<BR>}<BR>程序三<BR>void CMemBitmapView::OnHuitu()<BR>{<BR>    rect.left=0;<BR>    rect.top=0;<BR>    rect.right=1024;<BR>    rect.bottom=768;<BR>    PDC=this-&gt;GetDC();<BR>    memDC.CreateCompatibleDC(PDC); <BR>    memBitmap.CreateCompatibleBitmap(PDC,rect.right,rect.bottom);<BR>    pOldBmp = memDC.SelectObject(&amp;memBitmap);<BR>    memDC.FillSolidRect(rect,RGB(255,255,255));<BR>    CMemBitmapView::SetTimer(1,100,NULL);<BR>}<BR>void CMemBitmapView::OnTimer(UINT_PTR nIDEvent)<BR>{<BR>    PDC=this-&gt;GetDC();<BR>    memDC.Ellipse(300,150,650,500);<BR>    PDC-&gt;BitBlt(rect.left,rect.top,rect.right,rect.bottom,&amp;memDC,0,0,SRCCOPY);<BR>    CView::OnTimer(nIDEvent);<BR>}<BR></P>

szmq2 发表于 2007-3-21 13:45

<P>发错地方了吧.</P>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.