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

OnDraw(CDC*pDC){HBITMAPbitmap;HBITMAPoldbitmap;CDCmemdc;CRectrect;if(FileName=="")bit... 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();

}
好像把内存中的内容改了可以实现,怎么弄呢?
展开
 我来答
524082044
2011-05-18
知道答主
回答量:16
采纳率:0%
帮助的人:23.1万
展开全部
case IDM_QINGKONG:
DeleteMenu(hmenu,1,MF_BYPOSITION);//删除统计菜单项;即是删除动态菜单
DrawMenuBar(hwnd);//重新显示窗口菜单,即是恢复刚开始时候菜单模样
InvalidateRect(hwnd,NULL,1);//重新显示窗口画面
break;
希望能帮到你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
stone_dongdong
2011-05-19 · TA获得超过2853个赞
知道大有可为答主
回答量:1636
采纳率:0%
帮助的人:1026万
展开全部
晕那里那么复杂。
你使用CBitmap的话,析构函数会自动删除对象句柄,不用调用。
使用HBITMAP bitmap; 的话,在函数末尾加: DeleteObject( bitmap );
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yinfengnong
2011-05-18 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2300万
展开全部
可以用FillRect把某一块矩形填充为某一颜色
追问
有没有一个函数把把某一块矩形的颜色删除,就像橡皮擦似地?
追答
可以用FillRect把这一块矩形填充为白色,不就像当于橡皮擦吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大國際
2011-05-19
知道答主
回答量:8
采纳率:0%
帮助的人:0
展开全部
你必须先保存原先的图像(或者绘制方式)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chmdcr
2011-05-19 · 超过30用户采纳过TA的回答
知道答主
回答量:163
采纳率:0%
帮助的人:67万
展开全部
创建多个内存的bmp 想用哪个就贴哪个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式