我在 OnDraw() 函数里显示了一幅 BMP 图像,然后用 GDI 来绘制一个固定大小的矩形框,我想实现的是每次鼠标移动,都以鼠标当前在的 位置为 矩形框的左上角坐标,重新画矩形,我是把 画矩形的代码放在鼠标移动的响应函数中的:void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default ax=0;
ay=0; ax=point.x;
ay=point.y; //////////////////////////////////////
//画矩形
CDC* pDC=GetDC(); CPen pen(PS_SOLID,3,RGB(255,0,0));
CPen* OldPen=pDC->SelectObject(&pen);
pDC->Rectangle(ax,ay,ax+180,ay+114);
pDC->SelectObject(OldPen);
///////////////////////////////////////
CScrollView::OnMouseMove(nFlags, point);
}
这样是可以每次鼠标移动都画矩形,但是之前画的那些矩形框都还在,请问怎么样才可以把之前画的矩形框全都删除?只保留当前最新画的这个?我试过,要是把画矩形框的代码放到 OnDraw() 函数中,在OnMouseMove()函数中更新矩形左上角的坐标值,但是这样的话,画面上就只剩下第一次画的那个矩形框,鼠标移动后,画面上都不显示第一次之后画的矩形框,要如何才能实现矩形框的实时更新而且把之前画的矩形框都去掉?
{
// TODO: Add your message handler code here and/or call default ax=0;
ay=0; ax=point.x;
ay=point.y; //////////////////////////////////////
//画矩形
CDC* pDC=GetDC(); CPen pen(PS_SOLID,3,RGB(255,0,0));
CPen* OldPen=pDC->SelectObject(&pen);
pDC->Rectangle(ax,ay,ax+180,ay+114);
pDC->SelectObject(OldPen);
///////////////////////////////////////
CScrollView::OnMouseMove(nFlags, point);
}
这样是可以每次鼠标移动都画矩形,但是之前画的那些矩形框都还在,请问怎么样才可以把之前画的矩形框全都删除?只保留当前最新画的这个?我试过,要是把画矩形框的代码放到 OnDraw() 函数中,在OnMouseMove()函数中更新矩形左上角的坐标值,但是这样的话,画面上就只剩下第一次画的那个矩形框,鼠标移动后,画面上都不显示第一次之后画的矩形框,要如何才能实现矩形框的实时更新而且把之前画的矩形框都去掉?
解决方案 »
- 关于使用WinInet实现多线程下载的问题。
- 如何在DLL与EXE间传递动态数组参数?
- 基于对话框程序的古怪问题(难道限制内存使用?)
- 如何使用该函数
- 如何自动地将*.DLL和*.EXE文件拷入或写入Windos vista的系统目录c:\windows\system32中? 多谢指教.
- 关于得到硬盘某一个分区的相关信息。非常急啊!非常急啊!非常急啊!
- 如何取得Doc类指针!
- CWIN继承类问题
- 菜鸟问题,什么函数能把cstring 转化成int型或float型阿
- [急]VC操作word的问题,搞过这方面的朋友进来帮下,谢谢!
- WM_MESSAGE钩子,我根据WM_CHAR获取键盘,怎么有的窗口出现2次同一字符,有的又正常
- 关于hook
但是效率很低。
在OnMouseMove()函数中更新矩形左上角的坐标值,然后调用Invalidate/InvalidateRect更新重画
如果我在 OnMouseMove()函数或者是 OnTimer() 函数中调用Invalidate 来刷新的话,
画面闪烁的很厉害啊,这个怎么解决?谢谢各位!
使用双缓冲
原位置从新画就能擦出了