::SetWindowPos 与 ::MoveWindow

hjf80531 2006-05-12 04:21:18

按照网上的方法用双缓冲刷新一个WINDOW的背景..
BOOL CMoveRect::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
// CWnd::OnEraseBkgnd(pDC);
CRect rect;
this->GetClientRect(rect);
CBitmap bmpFace;
bmpFace.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
CBitmap* pOldBmp = NULL;
CDC MemDC;

MemDC.CreateCompatibleDC( pDC );
pOldBmp = MemDC.SelectObject(&bmpFace);
CBrush brush(RGB(23,255,58));
MemDC.FillRect(rect,&brush);

pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBmp);
bmpFace.DeleteObject();
MemDC.DeleteDC();
return FALSE;
}

在VIEW中创建一个窗口..这个窗口用以上方法填充底色.并随MOUSE移动
1.用SetWindowPos 来移动..窗口闪个不停

void CTemp1View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

::SetWindowPos( m_MoveWindow.m_hWnd, NULL, point.x, point.y, 100, 100,SWP_NOOWNERZORDER | SWP_NOZORDER | SWP_SHOWWINDOW | SWP_NOCOPYBITS );

CView::OnMouseMove(nFlags, point);
}

2. 把::SetWindowPos 改成 ::MoveWindow..就不闪了...
为什么呢?
...全文
234 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjf80531 2006-05-12
  • 打赏
  • 举报
回复
还是一样的结果~~~用::SetWindowPos 函数闪的厉害...::MoveWindow 就不闪了
Qiushen 2006-05-12
  • 打赏
  • 举报
回复
OnEraseBkgnd 函数里 把return FALSE 改为 return TRUE 试试
hjf80531 2006-05-12
  • 打赏
  • 举报
回复
没有图片..就是把MemDC填充一下颜色..再画到WINDOW
雷宗堂 2006-05-12
  • 打赏
  • 举报
回复
你把要移动的图片画在MemDC上就好了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧