画图程序,消除闪烁?
画图程序,消除闪烁? 问题点数:100、回复次数:3Top
1 楼tony1978(突击召唤师)回复于 2002-12-12 16:59:02 得分 15
根据需要处理擦除背景消息
重画使用双缓冲
说说你的具体需要?Top
2 楼hhuangchunlin(林之韵)回复于 2002-12-12 17:03:56 得分 85
BOOL CGridCtrl::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
return TRUE;
}
CPaintDC dc(this); // device context for painting
CRect rRect;
int nWidth,nHeight;
GetClientRect(&rRect);
nWidth=rRect.Width();
nHeight=rRect.Height();
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(&dc,nWidth,nHeight);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
// MemDC.FillSolidRect(0,0,nWidth,nHeight,m_crBackground);
// MemDC.FillSolidRect(0,0,nWidth,20,RGB(192,192,192));
// MemDC.FillSolidRect(0,0,40,nHeight,RGB(192,192,192));
DrawBkGround(&MemDC);
DrawBkPicture(&MemDC);
int nFlag;
CRect rcCur;
CRect rcSel;
// GetCurGridCellRect(rcCur);
GetCellRect(m_gridPosCur.nRow,m_gridPosCur.nCol,rcCur);
GetRectFromRg(m_rgSel,nFlag,rcSel);
CRgn rgn1,rgn2;
rgn1.CreateRectRgnIndirect(rcSel);
rgn2.CreateRectRgnIndirect(rcCur);
CBrush brush(RGB(180,190,210));
if(rgn1.CombineRgn(&rgn1,&rgn2,RGN_DIFF) != ERROR)
MemDC.FillRgn(&rgn1,&brush);
DrawGrid(&MemDC);
DrawGridText(&MemDC);
// FillRGSel(&MemDC);
//画矩形
DrawBlackRect3(&MemDC,rcSel,nFlag);
CRect rcClipboard;
GetRectFromRg(m_rgClipBoard,nFlag,rcClipboard);
// if(m_bCut || m_bCopy)
// {
// DrawDashRect3(&MemDC,rcClipboard,nFlag);
// }
dc.BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBit);
}Top
3 楼laosanr(天舵)回复于 2003-03-07 09:22:12 得分 0
重载OnEraseBkgnd()(在这里画图)返回trueTop




