hur.cn - 华软网

 热门搜索

VC 用BitBlt显示完BMP图像后,用什么函数能把图像清除,恢复到没有载入图像的情况?

  作者:未知    来源:网络    更新时间:2011/5/28
OnDraw(CDC* pDC)
{
HBITMAP bitmap;
HBITMAP oldbitmap;
CDC memdc;CRect rect;
if(FileName=="") bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),NULL,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION);
else 
    bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
memdc.CreateCompatibleDC(pDC);
GetClientRect(rect);
oldbitmap=(HBITMAP)memdc.SelectObject(bitmap);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
memdc.SelectObject(oldbitmap);


// 显示等待光标
BeginWaitCursor();

// 获取文档
CCh1_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

// 获取DIB
HDIB hDIB = pDoc->GetHDIB();

// 判断DIB是否为空
if (hDIB != NULL)
{
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);

// 获取DIB宽度
int cxDIB = (int) ::DIBWidth(lpDIB);

// 获取DIB高度
int cyDIB = (int) ::DIBHeight(lpDIB);

::GlobalUnlock((HGLOBAL) hDIB);

CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;

CRect rcDest;

// 判断是否是打印
if (pDC->IsPrinting())
{
// 是打印,计算输出图像的位置和大小,以便符合页面

// 获取打印页面的水平宽度(象素)
int cxPage = pDC->GetDeviceCaps(HORZRES);

// 获取打印页面的垂直高度(象素)
int cyPage = pDC->GetDeviceCaps(VERTRES);

// 获取打印机每英寸象素数
int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);

// 计算打印图像大小(缩放,根据页面宽度调整图像大小)
rcDest.top = rcDest.left = 0;
rcDest.bottom = (int)(((double)cyDIB * cxPage * cyInch)
/ ((double)cxDIB * cxInch));
rcDest.right = cxPage;

// 计算打印图像位置(垂直居中)
int temp = cyPage - (rcDest.bottom - rcDest.top);
rcDest.bottom += temp/2;
rcDest.top += temp/2;

}
else   
// 非打印
{
// 不必缩放图像
rcDest = rcDIB;
}

// 输出DIB
::PaintDIB(pDC->m_hDC, &rcDest, pDoc->GetHDIB(),
&rcDIB, pDoc->GetDocPalette());
}

// 恢复正常光标
EndWaitCursor();


}
---华软 网友回答---
你使用CBitmap的话,析构函数会自动删除对象句柄,不用调用。
使用HBITMAP bitmap; 的话,在函数末尾加: DeleteObject( bitmap );
---华软网友回复---
sdk 就考虑 DeleteObject
---华软网友回复---
InvalidateRect()
---华软网友回复---
把oldbitmap 声明为成员变量 或者全局变量  当需要 恢复到没有载入图像的情况时,选入oldbitmap 在BitBlt一次 。
---华软网友回复---
先保存以前图像,要清除就直接恢复以前图像
---华软网友回复---
没有图片也是图片,再bitblt一个就行了。

---华软网友回复---
将以前的内容再bitblt一次      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。