各位大虾.想请教一个难题,请大家指点一下.我现在做的项目遇到这样的一个问题.就是在鼠标在窗口中进行拖拉的时候需要将窗口利用虚框的形式拖动,直到鼠标释放之时才将窗口移动到释放位置,前提是不用如SystemParametersInfo()等更改系统设置.本人所遇问题有两个:一个是当鼠标弹起之时无法捕捉到鼠标弹起信息.二是暂时还没有想到解决选中窗口之时移动过程窗口不移动,只移动虚框.等鼠标弹起再将窗口移动到目标位置的方法.请各大虾帮帮忙.快点帮帮小弟想个法子

解决方案 »

  1.   

    CMainFrame框架不正是这样处理的吗?还要想什么法子。
      

  2.   

    1.无法捕捉到鼠标弹起信息, 需要在鼠标按下的时候 SetCapture
    2.窗口不移动 : 拦截消息
      只移动虚框: 自画或者用控件 移动
      

  3.   

    我也遇到过后来用PaintWindow()
    就好了
      

  4.   

    自建一个 popup window,父窗口是需要移动的窗口,用 SetWindowRgn 把这个窗口挖空成虚框的样子,然后移动这个窗口就像移动一个虚框,鼠标弹起的时候就是 WM_CAPTURECHANGED 的消息,其他的应该知道怎么做了吧?
      

  5.   

    鼠标按下后必须调用SetCapture(),才能收到窗口外的按钮弹起消息。画虚框可以用DrawFocusRect,画过后原位置再画一遍就是擦除,更改坐标再画,如此循环就实现了虚框拖动。
      

  6.   

    ringphone,你好那你说鼠标按下后必须调用setcapture(),那窗口外的按钮弹起消息应该用什么方法来获得呢?
      

  7.   

    鼠标问题解决了,但画虚框却始终画不出来啊!能不能再多给点提示,我画虚框是用鼠标的OnMoving进行画图的,但在鼠标按下之后用setcapture之后就无法画图了,或者根本看不到所画的虚框,能不能再帮帮忙.再多给点提示呢?谢谢.问题解决了.我会给分的.
      

  8.   

    画虚框注意DC必须是桌面,即HDC hdc = GetDC(HWND_DESKTOP);然后坐标也是屏幕坐标。
      

  9.   

    你指的不能获得桌面dc是什么意思,是GetDC失败还是不允许获取桌面dc?你先试试下面的代码,看看是不是有虚框出来HDC hDC = GetDC(HWND_DESKTOP);
    RECT rc = {100,100,300,300};
    for(int i=0;i<3;i++)
    {
    DrawFocusRect(hDC,&rc);
    InflateRect(&rc,-1,-1);
    }
    ReleaseDC(HWND_DESKTOP,hDC);