首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

CPaintDC dc(this); 第二次调用会断言

2012-04-28 
求助 CPaintDC dc(this) 第二次调用会断言void CScreenSpyDlg::OnPaint(){CPaintDC dc(this) // device

求助 CPaintDC dc(this); 第二次调用会断言
void CScreenSpyDlg::OnPaint() 
{
CPaintDC dc(this); // device context for painting

// TODO: Add your message handler code here
if (m_bIsFirst)
{
DrawTipString(_T("Please wait - initial screen loading"));
return;
}

BitBlt
(
m_hDC,
0,
0,
m_lpbmi->bmiHeader.biWidth, 
m_lpbmi->bmiHeader.biHeight,
m_hMemDC,
m_HScrollPos,
m_VScrollPos,
SRCCOPY
);

// (BYTE)-1 = 255;
// Draw the cursor
if (m_bIsTraceCursor)
DrawIconEx(
m_hDC,// handle to device context 
m_RemoteCursorPos.x - ((int) m_dwCursor_xHotspot) - m_HScrollPos, 
m_RemoteCursorPos.y - ((int) m_dwCursor_yHotspot) - m_VScrollPos,
m_CursorInfo.getCursorHandle(m_bCursorIndex == (BYTE)-1 ? 1 : m_bCursorIndex),// handle to icon to draw 
0,0,// width of the icon 
0,// index of frame in animated cursor 
NULL,// handle to background brush 
DI_NORMAL | DI_COMPAT// icon-drawing flags 
);
// Do not call CDialog::OnPaint() for painting messages
}

第二次调用 会断言在 CPaintDC dc(this); 求大牛赐教

[解决办法]
dc用完要释放吧
你还是移步VC区问问看吧
那边的人回答MFC的问题比较快
[解决办法]
什么叫第二次调用,ONPAINT不就是不停的重绘吗
?你是说调试的时候第二次会出现断言错误?
[解决办法]
我写了个双缓存的BUFFER DC类,你可以用一下,避免刷屏的时候有闪光;
.h文件:
#pragma once

// CBufferDC command target
// by ll 2011-5 for dly

class CBufferDC : public CDC
{
public:
CBufferDC(CDC* pDC,CRect& rect);
virtual ~CBufferDC();
private:
CDC* m_memDC;
CRect m_rect;
CBitmap m_memBitmap;//定义一个位图对象
HGDIOBJ m_bitmap;
};

.cpp文件:
// BufferDC.cpp : implementation file
//

#include "stdafx.h"
#include "BufferDC.h"


// CBufferDC

CBufferDC::CBufferDC(CDC* pDC,CRect& rect):m_memDC(pDC),m_rect(rect)
{
this->CreateCompatibleDC(pDC);
m_memBitmap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
m_bitmap = this->SelectObject(&m_memBitmap);
}

CBufferDC::~CBufferDC()
{
m_memDC->BitBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),this,m_rect.left,m_rect.top,SRCCOPY);//拷贝到前台显示
m_memBitmap.DeleteObject();
}


// CBufferDC member functions

使用:
CPaintDC dc(this); 
CRect clientRect;
GetClientRect(&clientRect);
CBufferDC memDC(&dc,clientRect);
// 下面想一般DC操作 绘制就可以了

热点排行