VC MFC 单文档贴图问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 13:31:15
不知道为什么,偶在单文档里面贴了张bmp的图,点击‘文件’-》‘新建’对话框就出错了。。下面是偶的代码流程。。

假设单文档工程名称为MySLG,图的ID为IDB_MAP

在CMySLGView类里面定义
Public:
CDC mdc;

然后在CMySLGView::OnInitialUpdate()初试化。。

void CMySLGView::OnInitialUpdate()
{
CView::OnInitialUpdate();

CClientDC dc(this);
mdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,500,200);
mdc.SelectObject(&bitmap);
bitmap.DeleteObject();

CBitmap bmpBk;
bmpBk.LoadBitmap(IDB_MAP);
CDC MemBKDC;
MemBKDC.CreateCompatibleDC(&dc);
MemBKDC.SelectObject(&bmpBk);
mdc.BitBlt(0,0,500,200,&MemBKDC,0,0,SRCCOPY);
MemBKDC.DeleteDC();
}
然后在OnDraw()写重绘
void CMySLGView::OnDraw(CDC* pDC)
{
CMySLGDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->BitBlt(0,0,500,200,&mdc,0,0,SRCCOPY);
}

流程就这样,不知道哪里出问题

原因:CreateCompatibleDC(&dc);只能执行一次,当再次执行之前必需要先释放DC.
另外,你在析构函数中也应该增加:mdc.DeleteDC();
建议使用方法二,虽然繁了点儿,可是更好
在方法二的析构函数中还应该写上:
CMySLGView::~CMySLGView()
{
if(m_bInitMdc)
{
mdc.DeleteDC();
}
}

方法一:
mdc.DeleteDC();//增加这样一句
mdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
--------------

方法二:
1在CMySLGView类里面定义
Public:
CDC mdc;
bool m_bInitMdc;//mdc是否已经初始化了
2在CMySLGView::CMySLGView()里面增加
m_bInitMdc=false;
3OnInitialUpdate改为
void CMySLGView::OnInitialUpdate()
{
CView::OnInitialUpdate();

if(!m_bInitMdc)
{
CClientDC dc(this);
mdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc,500,200);
mdc.SelectObject(&bitmap);
bitmap.DeleteObject();

CBitmap bmpBk;
bmpBk.LoadBitmap(IDB_MAP);
CDC MemBKDC;
MemBKDC.CreateCompatibleDC(&dc);
MemBKDC.SelectObjec