我有一个很棘手地问题,大家帮忙看看吧,谢谢!

goodluck10660 2003-09-12 12:09:42
我在作一个绘图工具时(主要时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,
小弟实在不知道怎么办,我就把它贴出来,请大家帮帮看看。
谢谢了。
...全文
25 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤必有邻 2003-09-14
  • 打赏
  • 举报
回复
没有显示,是否因为前景色与背景色相同?
这里有段代码,在对话框上画图:
BOOL CXXXDlg::OnInitDialog()
...
CRect rect;
GetClientRect(&rect);
m_bitmap.CreateCompatibleBitmap(GetDC(),rect.Width(),rect.Height());
m_memDC.CreateCompatibleDC(GetDC());
m_memDC.SelectObject(&m_bitmap);
CBrush brush;
brush.CreateSolidBrush(RGB(255,255,255));
m_memDC.FillRect(&rect,&brush);
brush.DeleteObject();
SetTimer(1,200,NULL);

void CXXXDlg::OnTimer(...)
CRect rect;
GetClientRect(&rect);
static int row;
m_memDC.MoveTo(0,row);
m_memDC.LineTo(rect.Width(),row);
row+=2;
//
CDC * pDC=GetDC();
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&m_memDC,0,0,SRCCOPY);

CDialog::OnTimer(nIDEvent);
huanyun 2003-09-14
  • 打赏
  • 举报
回复
HDC m_hMemDC;

SelectObject(hMemDC,hBitmap);//
LineTo(m_hMemDC,.....);

Onpaint
BitBlt(hDC,0, 0, rcClient.Width(), rcClient.Height(), m_hMemDC, 0, 0, SRCCOPY);

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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