双缓冲啊 你让小弟我情何以堪 有关问题 来了。
双缓冲啊 你让我情何以堪 问题 来了。。
void CMyStaticCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_iLButtonDownTip == 1)
{
if (m_pImgBuf)
{
CRect rtClient;
m_ptMove = point;
GetClientRect(rtClient);
CDC *dc = GetDC();
CDC tmpDc;
tmpDc.CreateCompatibleDC(dc);
tmpDc.FillSolidRect(rtClient,RGB(0,0,0));
tmpDc.Rectangle(&rtClient);
CBitmap bmTmp;
bmTmp.CreateCompatibleBitmap(dc,m_iImgWidth*m_fZoom,m_iImgHeight*m_iImgHeight);
bmTmp.SetBitmapBits(m_iImgWidth*m_fZoom*m_iImgHeight*m_iImgHeight*m_iImgBits,m_pBuf);
CBitmap *oldBitmap = tmpDc.SelectObject(&bmTmp);
int iButtonOffsetX=0,iButtonOffsetY=0;
iButtonOffsetX = m_ptMove.x - m_ptPreButton.x;
iButtonOffsetY = m_ptMove.y - m_ptPreButton.y;
m_ptOffset.x = m_ptPreImgLeftTop.x +iButtonOffsetX;
m_ptOffset.y = m_ptPreImgLeftTop.y + iButtonOffsetY;
dc->IntersectClipRect(rtClient);
dc->BitBlt(m_ptOffset.x,m_ptOffset.y,rtClient.Width()+m_ptOffset.x
,rtClient.Height()+m_ptOffset.y,&tmpDc,0,0,SRCCOPY);
tmpDc.SelectObject(oldBitmap);
ReleaseDC(&tmpDc);
ReleaseDC(dc);
}
}
CStatic::OnMouseMove(nFlags, point);
}
我画上去的图片 会留下痕迹 为什么呢,如果加上invalidaterect 又闪的厉害 谁救救我啊
------解决方案--------------------
鼠标移动的时候会自己调用ON_PAINT消息,把画图的画在ondraw里。
------解决方案--------------------
双缓冲要在内存中画图,最好在OnDraw或OnPaint中bitblt出来。
void CMyStaticCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_iLButtonDownTip == 1)
{
if (m_pImgBuf)
{
CRect rtClient;
m_ptMove = point;
GetClientRect(rtClient);
CDC *dc = GetDC();
CDC tmpDc;
tmpDc.CreateCompatibleDC(dc);
tmpDc.FillSolidRect(rtClient,RGB(0,0,0));
tmpDc.Rectangle(&rtClient);
CBitmap bmTmp;
bmTmp.CreateCompatibleBitmap(dc,m_iImgWidth*m_fZoom,m_iImgHeight*m_iImgHeight);
bmTmp.SetBitmapBits(m_iImgWidth*m_fZoom*m_iImgHeight*m_iImgHeight*m_iImgBits,m_pBuf);
CBitmap *oldBitmap = tmpDc.SelectObject(&bmTmp);
int iButtonOffsetX=0,iButtonOffsetY=0;
iButtonOffsetX = m_ptMove.x - m_ptPreButton.x;
iButtonOffsetY = m_ptMove.y - m_ptPreButton.y;
m_ptOffset.x = m_ptPreImgLeftTop.x +iButtonOffsetX;
m_ptOffset.y = m_ptPreImgLeftTop.y + iButtonOffsetY;
dc->IntersectClipRect(rtClient);
dc->BitBlt(m_ptOffset.x,m_ptOffset.y,rtClient.Width()+m_ptOffset.x
,rtClient.Height()+m_ptOffset.y,&tmpDc,0,0,SRCCOPY);
tmpDc.SelectObject(oldBitmap);
ReleaseDC(&tmpDc);
ReleaseDC(dc);
}
}
CStatic::OnMouseMove(nFlags, point);
}
我画上去的图片 会留下痕迹 为什么呢,如果加上invalidaterect 又闪的厉害 谁救救我啊
------解决方案--------------------
鼠标移动的时候会自己调用ON_PAINT消息,把画图的画在ondraw里。
------解决方案--------------------
双缓冲要在内存中画图,最好在OnDraw或OnPaint中bitblt出来。