我在View里绘制了几个矩形框,所有矩形框存储在一个链表中,在OnDraw()中遍历并绘出来。为了实现拖动的功能,响应OnMouseMove()事件,选中其中某个矩形然后拖动。鼠标移动的时候需要刷新矩形内的内容,用Invalidate(FALSE)的话,其他没有被拖动的矩形也会被刷新,弄得一闪一闪的。请问怎么解决?如果只是InvalidateRect的话,鼠标动作过大会产生很多拖尾。
解决方案 »
- 如何获取函数名称?
- 请问在win32 sdk环境下如何引用自编的Active控件呀?
- Windows 重叠IO操作中的一点小问题,
- 如何将组件中的recordset(ado)传递给客户中的recordset(ado)?用idispatch参数?
- Internet上通讯, 用TCP还是UDP?
- 偶想申请这个版的斑竹,不知道有没有兄弟支持
- 大家帮我看看这个关于adsl的问题
- 哪种情况new了之后不delete也不要紧?
- MFC如何实现此打印功能?
- opengl中如何判断网格模型中哪些顶点在可见面上?
- 请问为什么要用COleDateTime
- ********急啊,自己好久都解决不了的问题,高分求解*********
如果没有,照如下几步来做
1.确定用户是否要拖动某个主框,可以通过在WM_LBUTTONDOWN里设置一个变量,记录鼠标按下时有没有点中一个方框,如果有的话,则将该变量置TRUE
2.在WM_MOUSEMOVE时,判断该变量是否是TRUE,是的话,则移动该图层。就在这里,已经确定用户是需要拖动图层了,那就先把其他不需要拖动的方框,合并成一个HBITMAP,这只在第一次WM_MOUSEMOVE时需要做,然后接着的WM_MOUSEMOVE事件,都是只做两次画图操作,就是把刚合成的那个图,显示出来,再显示那个移动的方框
是这样吗?我可是亲身做过这种绘图的程序,用InvalidateRect是没有问题的,现在把你设置的那个CRect边界再扩大一点就好了。
祝LZ成功!