无边框对话框的缩放

1、        添加WM_NCHITTEST消息

2、        设置对话框属性System Menu 为False。

如果不设置添加完代码以后对话框边框出现了箭头,但是窗口大小是固定的。

3、        添加代码

LRESULT CDialogZoomDlg::OnNcHitTest(CPoint point)

{

         // TODO:  在此添加消息处理程序代码和/或调用默认值

         //无边框缩放

         //这里是防止在最大化的时候能缩放窗口(在没有WS_THICKFRAME风格的情况下需要这样处理下)

         if (IsZoomed())

         {

                   return CDialog::OnNcHitTest(point);

         }

         CRect rect;

         GetClientRect(&rect);

         CPoint pt = point;

         ScreenToClient(&pt);

         static int nFrame = 4; // 窗口边框的宽度

         rect.DeflateRect(nFrame, nFrame);

         CRect RectResize(rect.right - 20, rect.bottom - 20, rect.right, rect.bottom);

         // CRect rectTitle(nFrame,nFrame, rect.right - nFrame,CAPTION_HEIGHT);

         if (!rect.PtInRect(pt))

         {

                   if (pt.x <= nFrame && pt.y >= rect.bottom - nFrame)

                   {

                            return HTBOTTOMLEFT;

                   }

                   else if (pt.x <= nFrame && pt.y <= nFrame)

                   {

                            return HTTOPLEFT;

                   }

                   else if (pt.x >= rect.right - nFrame && pt.y <= nFrame)

                   {

                            return HTTOPRIGHT;

                   }

                   else if (pt.x >= rect.right - nFrame && pt.y >= rect.bottom - nFrame)

                   {

                            return HTBOTTOMRIGHT;

                   }

                   else if (pt.x <= nFrame)

                   {

                            return HTLEFT;

                   }

                   else if (pt.y <= nFrame)

                   {

                            return HTTOP;

                   }

                   else if (pt.y >= rect.bottom - nFrame)

                   {

                            return HTBOTTOM;

                   }

                   else if (pt.x >= rect.right - nFrame)

                  {

                            return HTRIGHT;

                   }

         }

         else if (RectResize.PtInRect(pt))

         {

                   return HTBOTTOMRIGHT;

         }

         // else if (rectTitle.PtInRect(pt))

         // {

         // return HTCAPTION;

         // }

         else

         {

                   return HTCLIENT;

         }

         return CDialog::OnNcHitTest(point);

}

只加这么多,就可以缩放。四个方向均可以。

时间: 2024-10-06 08:02:16

无边框对话框的缩放的相关文章

无边框对话框拖动改变大小的实现总结

相同是项目遇到的问题,要求是无边框的对话框要实现鼠标的拖动改变大小.无边框对话框跟有边框的实现肯定不一样喽. 我上网搜到一种方法是: 须要处理下面这三个消息: WM_NCHITTEST  WM_SETCURSOR  WM_NCLBUTTONDOWN  消息处理函数: UINT CXXXDlg::OnNcHitTest(UINT nHitTest, CPoint point) { CRect rect; GetWindowRect(&rect); if(point.x <= rect.left

【Qt编程】无边框窗口的缩放与拖动

在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词本: 很明显,两者的主要区别就是周围的边框问题.你可以对比QQ以前的版本和这几年的版本,就会发现都倾向于下面这种窗口模式.下面我们就说说如何用Qt实现无边框窗口的缩放与拖动. 对于无边框窗口的拖动其实很简单,其基本思想是,在鼠标移动前后记录鼠标的坐标,然后将窗口移动这两个坐标之差的距离即可,具体实现

Win10无边框对话框加阴影

网上给无边框加阴影就是那个著名的类WndShadow,在XP上直接使用,很方便.但是Win10上直接用没有效果. 将对话框的style设为popup,title bar设为false.然后添加如下代码: int CMFCApplication1Dlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { //初始化阴影窗口 if (CDialogEx::OnCreate(lpCreateStruct) == -1) return -1; LONG styleVal

QT_无边框窗口拖动缩放

public: int countFlag(QPoint p, int row); void setCursorType(int flag); int countRow(QPoint p); protected: void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseDoubleClickEvent(QMouseEvent *event); void mous

MFC无边框对话框移动

当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上.这需要重载CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用父类的该函数,如果返回HTCLIENT,说明鼠标在窗口客户区内,使重载函数返回HTCAPTION,使Windows误认为鼠标处于标题条上. 当用户在窗口客户区按下鼠标左键时,使Windows认为鼠标是在标题条上,即在处理WM_LBUTTONDOWN消息的处

Qt 无边框窗体改变大小 完美实现(全部自己实现)

近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo,写了一个小时,问题太多了,扔一边先不管了. 今天需要改进UI界面,没办法了,重新整理了下思路,没想到做出来了.下面来分享下实现的过程,也许是菜鸟专栏,高手勿喷~ 1.首先大家要了解各九宫格的概念 一个窗体可以被划分为上.下.左.右.左上.左下.右上.右下.中间,除了中间部分,其他都需要写程序处理.

Qt 无边框窗体改变大小 完美实现

近期,做项目用到无边框窗体,令人蛋疼的是无边框窗体大小的改变要像右边框那样,上下左右四周,而且要流畅. 网上也找了些代码,发现居然还要连接到windows事件,这显然不合常理,后来自己新建了demo,写了一个小时,问题太多了,扔一边先不管了. 今天需要改进UI界面,没办法了,重新整理了下思路,没想到做出来了.下面来分享下实现的过程,也许是菜鸟专栏,高手勿喷~ 1.首先大家要了解各九宫格的概念 一个窗体可以被划分为上.下.左.右.左上.左下.右上.右下.中间,除了中间部分,其他都需要写程序处理.

【Qt编程】无边框窗口的拖动

在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口的缩放相关的程序放在一起,下面专门单独分离出来. 窗口的拖放只涉及到鼠标事件:按下操作.释放操作和移动操作,因此只需要重写这三个函数.由于程序比较简单,并且注释也比较详细,就不作过多介绍.新建一个基类为QWidget的Qt Gui应用程序,只需修改widget.h和widget.cpp文件如下: 1

Qt无边框窗体-最大化时支持拖拽还原

目录 一.概述 二.效果展示 三.demo制作 1.设计窗体 2.双击放大 四.拖拽 五.相关文章 原文链接:Markdown模板 一.概述 用Qt进行开发界面时,既想要实现友好的用户交互又想界面漂亮,那么自定义界面就必不可少.其中有一个操作就是是我们每一个Qter开发者都要会的,而且是经常进行的. Qt::FramelessWindowHint这个属性想必大家都使用过,有些同学可能对这个属性很了解,也用的是炉火纯青,今天我们也来说说这个属性. 关于这个无边框属性网上也有一些文章,有些谈论的是b