我在作一个绘图工具时(主要时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,
小弟实在不知道怎么办,我就把它贴出来,请大家帮帮看看。
谢谢了。
为对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,
小弟实在不知道怎么办,我就把它贴出来,请大家帮帮看看。
谢谢了。
解决方案 »
- 视类对话框的CComboBox有值但不能显示值
- 请教高手们,ClistCtl控件(列表控件)的内容如何导入到Excel中以便整理打印?回复都给分!
- 求解决方案:得到另一个应用程序的一个特定窗口的打开后,向这个窗口发送个回车键。是mfc能解决的问题吗?
- 学习《windows核心编程》的基础
- 如何将一下模板函数定义成一个公共函数。放在另一个文件里以供调用。谢谢。
- 高分求教,关于checklistbox的
- 采用Alt+F4与使用鼠标关闭窗口有什么区别?
- 如何将MFC标题栏内容改变,本人是个菜鸟,求帮助
- 极其简单的问题!请大家帮忙!
- 有谁知道CToolTipCtrl的应用
- [求助]编写词法分析器
- 为什么下面的头文件没有 .h后缀
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();