本帖最后由 jinder 于 2009-07-09 16:05:11 编辑

解决方案 »

  1.   

    直接
    ReleaseCapture();
    PostMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);不要这段:if (e.Button == MouseButtons.Right)试试是不是右键也可以了
      

  2.   

    该版已被API版主 supergreenbean、TechnoFantasy 修改过。
      

  3.   

    个人拙见:
    可能是因为只有PostMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
    不够,这只是将你在客户区的WM_LBUTTONDOWN模拟成在非客户区WM_NCLBUTTONDOWN的标题栏HT_CAPTION上一般都是在lmousedown后Post这句,此时已经有LBUTTONDOWN的消息进来。而现在你点的是右键,没有LBUTTONDOWN的消息,可能就无效了。你试试先Post一句WM_LBUTTONDOWN,或者moust_event模拟左键按下看看行不行
      

  4.   

    试一试SendMessage呢,感觉这个函数要强大一点
      

  5.   

     不存在"强大"与否的说法.各是各的用途.有些消息必须要PostMessage投递,如键盘鼠标消息;而有些消息必须要SendMessage发送,比如wm_settext/wm_gettext,因为这些消息中包含指针,必须要马上处理,不然等目标程序处理前就返回的话,谁敢保证到了那时,指针还是有效的.另外,为啥非要用PostMessage这个API呢?换个思路吧.你拦截鼠标的右键消息,再取得鼠标当前的位置,以及鼠标下的句柄,直接使用MoveWindow不就行了....
      

  6.   


    PostMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);我感觉这一句的作用应该是:模拟鼠标点击标题栏,而不是模拟鼠标左键点击标题栏.


    你说得我之前有测试过了,下边代码,都无效:
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ReleaseCapture();
                PostMessage(Handle, WM_LBUTTONDOWN, 0, 0);//按下左键
                PostMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                ReleaseCapture();
                PostMessage(Handle, WM_RBUTTONUP, 0, 0);  //释放右键
                  PostMessage(Handle, WM_LBUTTONDOWN, 0, 0);//按下左键
                  PostMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }

    用MoveWindow的话是可以,不过有个缺点就是在WIN7下会使窗口失去了触边感应功能,WIN7下拖动窗口当鼠标碰到屏幕边缘时会自动调整成某些预设位置和大小,这个挺实用的,不舍得舍弃.
      

  7.   

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
        Call ReleaseCapture
        Call PostMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        
        Call ReleaseCapture
        Call PostMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0End SubVB6测试成功,点下右键窗口可以跟着移动不过问题是,松开键盘或者右键后窗口仍粘在鼠标上,也就是说处在按住不放仍未松开的状态。我在MouseUp和KeyUp处理了未果,因为晚上有点事情无法做进一步的测试,楼主你可以继续试试,祝你好运。