zoukankan      html  css  js  c++  java
  • 无边框窗口实现拖拉效果

     实现效果需要处理以下这三个消息:

    WM_NCHITTEST  WM_SETCURSOR  WM_NCLBUTTONDOWN 

    UINT CXXXDlg::OnNcHitTest(UINT nHitTest, CPoint point)
    ...{
     // TODO: 在此添加消息处理程序代码和/或调用默认值
     CRect rect;
     CRect rect1;
     GetWindowRect(&rect);
     rect1 = rect;
     rect1.DeflateRect(10, 10, -10, -10);
     rect1.NormalizeRect();

     if(point.x <= rect.left+3)
      return HTLEFT;
     else if(point.x >= rect.right-3)
      return HTRIGHT;
     else if(point.y <= rect.top+3)
      return HTTOP;
     else if(point.y >= rect.bottom-3)
      return HTBOTTOM;
     else if(point.x <= rect.left+10 && point.y <= rect.top+10)
      return HTTOPLEFT;
     else if(point.x >= rect.right-10 && point.y <= rect.top+10)
      return HTTOPRIGHT;
     else if(point.x <= rect.left+10 && point.y >= rect.bottom-10)
      return HTBOTTOMLEFT;
     else if(point.x >= rect.right-10 && point.y >= rect.bottom-10)
      return HTBOTTOMRIGHT;
     else if(!rect.IsRectEmpty())
     {
      LRESULT uRet = CWnd::OnNcHitTest(point);
      uRet = (uRet == HTCLIENT) ? HTCAPTION : uRet;
      return uRet;
     }
     else
     {
      return CWnd::OnNcHitTest(point);
     }
        return 0;
    // return CWnd::OnNcHitTest(point);
    }


    BOOL CXXXDlg::OnSetCursor(HWND hWnd, UINT nHitTest, UINT message)
    ...{
        if(nHitTest == HTCAPTION || nHitTest == HTSYSMENU ||
           nHitTest == HTMENU || nHitTest == HTCLIENT)
       ...{
           SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
       }
       else if(nHitTest == HTTOP || nHitTest == HTBOTTOM)
       ...{
           SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));
       }
       else if(nHitTest == HTLEFT || nHitTest == HTRIGHT)
       ...{
           SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));
       }
       else if(nHitTest == HTTOPLEFT || nHitTest == HTBOTTOMRIGHT)
       ...{
           SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));
       }
       else if(nHitTest == HTTOPRIGHT || nHitTest == HTBOTTOMLEFT)
       ...{
           SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));
       }
       else
       ...{
           SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));
        }
    }



    void CEditWnd::OnNcLButtonDown(UINT nHitTest, CPoint point)
    {
     // TODO: 在此添加消息处理程序代码和/或调用默认值
       if(nHitTest == HTTOP)
           SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
       else if(nHitTest == HTBOTTOM)
           SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
       else if(nHitTest == HTLEFT)
           SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y));
       else if(nHitTest == HTRIGHT)
           SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
       else if(nHitTest == HTTOPLEFT)
           SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
       else if(nHitTest == HTTOPRIGHT)
           SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
       else if(nHitTest == HTBOTTOMLEFT)
           SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
       else if(nHitTest == HTBOTTOMRIGHT)
           SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
       else if(nHitTest==HTCAPTION)
      SendMessage(WM_SYSCOMMAND, SC_MOVE | 4, MAKELPARAM(point.x, point.y));
     //CWnd::OnNcLButtonDown(nHitTest, point);
    }


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mynamelj/archive/2006/12/16/1445567.aspx

  • 相关阅读:
    Python实现杨辉三角
    第8.30节 重写Python __setattr__方法实现属性修改捕获
    转:Cookie详解
    第8.29节 使用MethodType将Python __setattr__定义的实例方法与实例绑定
    第8.28节 Python中使用__setattr__定义实例变量和实例方法
    第8.27节 Python中__getattribute__与property的fget、@property装饰器getter关系深入解析
    第8.26节 重写Python类中的__getattribute__方法实现实例属性访问捕获
    关于open函数文件打开模式的有意思的一个现象
    第8.25节 Python风格的__getattribute__属性访问方法语法释义及使用
    转:关于Python中的lambda,这篇阅读量10万+的文章可能是你见过的最完整的讲解
  • 原文地址:https://www.cnblogs.com/carl2380/p/1924647.html
Copyright © 2011-2022 走看看