首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

又是一个GDI+的有关问题,绘制时闪了一下,就不见了

2012-05-09 
又是一个GDI+的问题,绘制时闪了一下,就不见了我的代码是这个样子的:CDC* pDCGetDC()CDC memDCCRect win

又是一个GDI+的问题,绘制时闪了一下,就不见了
我的代码是这个样子的:
  CDC* pDC=GetDC();
CDC memDC;
CRect winRect;
GetClientRect(winRect);

CBitmap MemBitmap;

// 设备描述表初始化
memDC.CreateCompatibleDC(pDC);

// 建立与屏幕显示兼容的内存显示设备
MemBitmap.CreateCompatibleBitmap(pDC, winRect.Width(), winRect.Height());

// 选取空白位图
memDC.SelectObject(MemBitmap);
memDC.FillSolidRect(0, 0, winRect.Width(), winRect.Height(), RGB(255,255,255));

Graphics graph(pDC->GetSafeHdc());

REAL x = 0.0;
REAL y = 0.0;

//画多张图
for (int i=0;i<m_nPicNum;i++)
{
CString Path = GetFilePath(i);
OpenFile(Path);
Image& image=*m_pBitmap;
CSize showPicSize = GetShowPicSize(image);

REAL width = (REAL)showPicSize.cx;
REAL height = (REAL)showPicSize.cy;
graph.DrawImage(&image, x, y, width, height);
x+=width+3;
}
MemBitmap.DeleteObject();
memDC.DeleteDC();

[解决办法]
我说几点:
1、你的代码里与MemBitmap , memDC 有关的哪些语句都没有任何用处,完全是多余的。你可以全都删掉,代码显得干净一些。
2、你在用
CDC* pDC=GetDC(); 说明你的绘制代码不在onpaint或者onErasebackground(可能有拼写错误,将就看)里面,你说的画的东西一闪,很有可能你在代码里画的哪些东西被onpaint 或者onErasebackground里面的绘制给覆盖了,所以你可以考虑把这些绘制代码放到onpaint 或者onErasebackground 里试一试。


[解决办法]

探讨
引用:

我说几点:
1、你的代码里与MemBitmap , memDC 有关的哪些语句都没有任何用处,完全是多余的。你可以全都删掉,代码显得干净一些。
2、你在用
CDC* pDC=GetDC(); 说明你的绘制代码不在onpaint或者onErasebackground(可能有拼写错误,将就看)里面,你说的画的东西一闪,很有可能你在代码里画的哪些东西被onpaint ……

热点排行