求助 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操作 绘制就可以了