我实在没招了,只有请教CSDN上面的大虾了!谢谢。

goodluck10660 2003-09-12 12:11:13
我在作一个绘图工具时(主要时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,
小弟实在不知道怎么办,我就把它贴出来,请大家帮帮看看。
谢谢了。
...全文
35 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
isdong 2003-09-12
  • 打赏
  • 举报
回复
CPaintDC dcFace(this);
CRect rcClient;
GetClientRect(&rcClient);

CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(&dcFace,rcClient.Width(),rcClient.Height());
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(&rcClient,RgbWhite);

DrawLogoWindow(&MemDC);


dcFace.BitBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBit);
MemBitmap.DeleteObject();
ReleaseDC(&MemDC);
MemDC.DeleteDC();

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧