我在作一个绘图工具时(主要时Bitmap和各种曲线),
为对Bitmap进行StretchBlt(它需要hdcDest, 和hdcSrc,)
我以前的做法时,定义一个hMemDc句柄,
HDC hMemDC = CreateCompatibleDC(pDC->GetSafeHdc());
然后选中对象
SelectObject(hMemDC,hBitmap);
再调用bimap缩放函数:
StretchBlt(
        pDC->GetSafeHd(),nLeft,nTop,nWidth,nHeight,
       hMemDC,0,0,pBitmapInfoHeader->biWidth,
       abs(pBitmapInfoHeader->biHeight),SRCCOPY);
其他地绘图都是利用CDC指针pDC来完成地,如pDC->LineTo等等。这样的结果时在OnPaint中调用时,出现明显地闪烁。效果很不理想,后来听说把绘图过程在MemDC中完成,最后在OnPaint中copy至dc即可。我试着作了一下,我定义了一个变量m_MemDC,
if (m_MemDC.GetSafeHdc() == NULL)
m_MemDC.CreateCompatibleDC(pDC);
在对bitmap处理时,我采用了如下地步骤:
1。SelectObject(hMemDC,hBitmap);//这是同上面一样定义地一个句柄,
2。StretchBlt(
        m_MemDC.GetSafeHd(),nLeft,nTop,nWidth,nHeight,//将pDC换成m_MemDC
       hMemDC,0,0,pBitmapInfoHeader->biWidth,
       abs(pBitmapInfoHeader->biHeight),SRCCOPY);
   其目的是想将hMemDC中Bitmap缩放到m_MemDC上。
3。进行其他地绘图
   m_MemDC.LineTo等等
4。最后在Onpaint函数中:
dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(), &m_MemDC, 0, 0, SRCCOPY);结果什么都没有显示出来,我跟踪了一下,好像StretchBlt和BitBlt的返回值都是0,
小弟实在不知道怎么办,我就把它贴出来,请大家帮帮看看。
谢谢了。