请教高手,我怎么才能达到用鼠标摁住窗体的任意部分,移动此窗体?就像用鼠标摁住标题栏那样,移动窗体!

解决方案 »

  1.   

    重载
    UINT CDlg::OnNcHitTest(CPoint point)
    {
    if(CWnd::OnNcHitTest(point)==HTCLIENT&&(::GetAsyncKeyState(MK_LBUTTON)<0))
    return HTCAPTION; return CWnd::OnNcHitTest(point);
    }
      

  2.   

    一句话搞掂:
    void CXXXDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
            SendMessage(WM_SYSCOMMAND,0xF012,0); //移动无标题栏对话框    CDialog::OnLButtonDown(nFlags, point);
    }
      

  3.   

    怎样单击窗体任何位置就可移动窗体 
     void CInsertStrToFileDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
    CDialog::OnLButtonDown(nFlags, point);
    }  
      

  4.   

    如何按非客户区移动窗体
    作者 浙江大学 王向伟
    下载源代码 
    我曾在VCKBSAE上看到一介绍如何按非客户区移动窗体,既重载WM_NCHITTEST,返回HTCAPTION。但我认为有一点不妥就是没有了鼠标右键功能。这里我介绍一种方法,即可已在客户区移动窗体又可以实现鼠标右键功能。
    1、新建一工程DLG。采用默认设置。
    2、添加消息处理函数: void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
        PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,pointy));
        CDialog::OnLButtonDown(nFlags, point);
    }
          
    3、添加右键功能。已实现鼠标右键功能 void CDlgDlg::OnRButtonDown(UINT nFlags, CPoint point) 
    {
       CMenu menu,*sub;
       menu.LoadMenu(IDR_MENU1);
       sub=menu.GetSubMenu(0);
       ClientToScreen(&point);
       sub->TrackPopupMenu(TPM_RIGHTBUTTON,point.x,point.y,this);
       CDialog::OnRButtonDown(nFlags, point);
    }      
    其它实现细节请参见源代码。 http://www.vckbase.com/document/viewdoc.asp?id=502http://www.vckbase.com/code/downcode.asp?id=1728
      

  5.   

    头文件 中添加申明
    UINT OnNcHitTest(CPoint pt);在消息映射中添加
    ON_WM_NCHITTEST()函数代码如下
    UINT CYourDlg::OnNcHitTest(CPoint pt)
    {
    CRect rc;
    GetClientRect(&rc);
    ClientToScreen(&rc);
    return rc.PtInRect(pt) ? HTCAPTION : CDialog::OnNcHitTest(pt);
    }---------
          May you succeed!
                -----------------
      

  6.   

    加上左键按下消息
    void CXXXDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
     
    CDialog::OnLButtonDown(nFlags, point);
    //加上下面这句话
    PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
    }