VC MFC 单文档贴图问题
来源:百度知道 编辑:UC知道 时间:2024/05/14 13:31:15
假设单文档工程名称为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