zoukankan      html  css  js  c++  java
  • vc ++ 实现无标题拖动

    WM_LButtonDown 消息响应处理 // 鼠标左键

    void CDlgDlg::OnLButtonDown(UINT nFlags, CPoint point) 
    {
     PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));
     CDialog::OnLButtonDown(nFlags, point);
    }

    按窗体任何位置都可移动窗体!-------------------------------------------

    -----在无标题栏的窗体上右键功能实现:↓↓

    WM_RButtonDown 消息响应处理 // 鼠标右键

    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);
    }

    -----------------------------------------------------------------------------------------------------------------

    对于无标题栏的对话框,用鼠标移动它的简单方法为:对消息WM_NCHITTEST进行处理,然后做鼠标位置的判断,如果鼠标位置在要移动窗口的客户区,则返回为鼠标在标题栏的信号,也就是欺骗windows,让它误认为你在点击标题栏,于是,你就可以正常拖动窗口了。

    WM_NCHITTEST  消息响应处理

    让窗口部分区域起移动功能的作用!

    函数GetWindowPlacement得到当前窗口在屏幕上的位置.

    这个函数的参数类型为WINDOWPLACEMENT结构。原型为
    typedef struct tagWINDOWPLACEMENT {     /* wndpl */
       UINT  length;
       UINT  flags;
       UINT  showCmd;
       POINT ptMinPosition;
       POINT ptMaxPosition;
       RECT  rcNormalPosition;
    } WINDOWPLACEMENT;
    其中,第六个变量rcNormalPosition为窗口正常显示时的位置

    UINT CTimeWakeDlg::OnNcHitTest(CPoint point)
    {
           UINT hit=CDialog::OnNcHitTest(point);
           if(hit==HTCLIENT)
           {
                  WINDOWPLACEMENT winplace;
                  GetWindowPlacement(&winplace);
                  int xp=winplace.rcNormalPosition.left;
                  int yp=winplace.rcNormalPosition.top;
     
                  if((point.x>xp)&&(point.x<xp+50)&&(point.y>yp)&&(point.y<yp+30))
                         return HTCAPTION;
                  else 
                         return hit;
           }
           else
                  return hit;
    }       

    好了,再在左上角画个图之类的,就更明显漂亮喽

  • 相关阅读:
    洛谷-P5743 【深基7.习8】猴子吃桃
    洛谷-P5741 【深基7.例10】旗鼓相当的对手
    洛谷-P5740 【深基7.例9】最厉害的学生
    洛谷-P5739 【深基7.例7】计算阶乘
    jvm中常见的指令笔记
    join()方法的源码分析
    Java中线程状态的各种转换关系
    java构造器遇到父类没有无参构造的分析
    jvm栈和堆
    spring新注解
  • 原文地址:https://www.cnblogs.com/shengshuai/p/wbttd.html
Copyright © 2011-2022 走看看