精华内容
下载资源
问答
  • # pyside2无边框窗口双击标题栏最大化还原 1. 去除系统自带边框,自定义美观ui; 2. 窗口可随意拖动; 3. 最小化、最大化、关闭按钮; 4. 双击标题栏最大化/还原窗口; 5. 最大化状态下拖动窗口还原。
  • 窗口弹出时为指定大小,每次双击标题栏,或单击还原按钮将会回到窗口指定的大小位置。
  • 第一个问题:只要禁止了非客户区的双击消息即可实现 (1)添加WM_NCLBUTTONDBLCLK事件处理函数 (2)在相应的函数处理中注释掉一下代码,不然父类默认处理 第二个问题做法有很多,我这里还要求最小...

    做项目中遇到了这两个问题,主要是对非客户区的处理,现在把做法写出来,

    第一个问题:只要禁止了非客户区的双击消息即可实现

    (1)添加WM_NCLBUTTONDBLCLK事件处理函数


    (2)在相应的函数处理中注释掉一下代码,不然父类默认处理



    第二个问题做法有很多,我这里还要求最小按钮和关闭按钮可用,不点击最小化按钮和关闭按钮就禁止单击事件,我的做法如下

    (1)添加点击事件的消息

    (2)添加一下代码


    这里解释下:关闭按钮的id是SC_CLOSE,最小化按钮的ID是SC_MINIMIZE,我通过调试得知最小化按钮的hHitTest=8,关闭按钮的nHitTest=20,当等于8或者20时,处理点击消息,其他不出来,具体如上。

    展开全文
  • 主要介绍了C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法,涉及C#使用WinForm针对窗口操作的各种常用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • QMainWindow通过setWindowFlags(Qt::FramelessWindowHint)该函数隐藏掉标题栏以后,就不能通过窗口四周来拖动大小了,所以必须要重写,重写两种方法:第一种重写是:mouseMoveEvent,该方法要设置以下两点(1)...
  • Qt去掉窗口标题栏实现移动缩放
  • } 看最后一段: (mouseEvent->type() == QEvent::MouseButtonDblClick) { //下面可以写自己的代码 //以下写法可以双击识别限定在标题栏 if (this->btnMenu_Max->isVisible() && watched == this->widgetTitle) { /...

    1.使用事件过滤器实现

    bool QUIWidget::eventFilter(QObject *watched, QEvent *event)
    {
        static QPoint mousePoint;
        static bool mousePressed = false;
    
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        if (mouseEvent->type() == QEvent::MouseButtonPress) {
            if (mouseEvent->button() == Qt::LeftButton) {
                mousePressed = true;
                mousePoint = mouseEvent->globalPos() - this->pos();
            }
        } else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
            mousePressed = false;
        } else if (mouseEvent->type() == QEvent::MouseMove) {
            if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
                if (this->property("canMove").toBool()) {
                    this->move(mouseEvent->globalPos() - mousePoint);
                }
            }
        } else if (mouseEvent->type() == QEvent::MouseButtonDblClick) {
            //以下写法可以将双击识别限定在标题栏
            if (this->btnMenu_Max->isVisible() && watched == this->widgetTitle) {
                //if (this->btnMenu_Max->isVisible()) {
                this->on_btnMenu_Max_clicked();
            }
        }
    
        return QWidget::eventFilter(watched, event);
    }

    看最后一段:

    (mouseEvent->type() == QEvent::MouseButtonDblClick) {
            //下面可以写自己的代码
            //以下写法可以将双击识别限定在标题栏
            if (this->btnMenu_Max->isVisible() && watched == this->widgetTitle) {
                //if (this->btnMenu_Max->isVisible()) {
                this->on_btnMenu_Max_clicked();
            }
        }

    2.安装过滤器

    this->widgetTitle->installEventFilter(this);
    展开全文
  • Win10正式版非活动窗口标题栏颜色修改 是一个注册表文件,直接双击导入win10 可以更改窗口标题颜色,明显区分活动窗口 和 前置窗口
  • 无边框窗口可以拖动,可以缩放,双击可以...可加上自定义图标、标题、最小最大化按钮、关闭按钮,实现自定义自绘标题栏,就可以模仿QQ聊天窗口界面或微信聊天窗口界面。 在 Windows7 64位平台上用 DevCPP 编译通过。
  • 今天小编就为大家分享一篇c#禁止通过拖动,双击标题栏改变窗体大小的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • DuiLib禁用双击标题栏窗口最大化

    千次阅读 2016-06-06 13:02:05
    要禁用窗口最大化只要屏蔽掉非客户区的双击消息就可以了 主要代码如下: //屏蔽双击放大 if (WM_NCLBUTTONDBLCLK == uMsg) { return 0; } return WindowImplBase::HandleMessage(uMsg, wParam, lParam); ...

    要禁用窗口最大化只要屏蔽掉非客户区的双击消息就可以了 主要代码如下:

    //屏蔽双击放大
    	if (WM_NCLBUTTONDBLCLK == uMsg)
    	{
    		return 0;
    	}
    
    	return WindowImplBase::HandleMessage(uMsg, wParam, lParam);



    要截取到这个消息必须override WindowImplBase类中的 LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) 成员函数,如下即可实现屏蔽双击放大。override是c++ 11新增的关键字 可以了解下。vs2013以下的编译器删除即可






    展开全文
  • 去掉Qt窗口的标题边框,重新定义标题栏可以标题栏上实现更多的功能,能满足更多的开发需求,可以实现标题栏的拖动,双击,自定义放大缩小。  本文引用自:http://www.devbean.net/2011/10/custom-qt-titlebar/...

        去掉Qt窗口的标题边框,重新定义标题栏,可以在标题栏上实现更多的功能,能满足更多的开发需求,可以实现标题栏的拖动,双击,自定义放大缩小。

         本文引用自:http://www.devbean.net/2011/10/custom-qt-titlebar/,感谢原作者,本文对其进行了重新整理,并且修改了一些小问题。

        运行界面如下:


        详细代码如下:

    #include <QWidget>
    #include <QToolButton>
    #include <QPixmap>
    
    class XMainWindowTitle : public QWidget
    {
        Q_OBJECT
    public:
        XMainWindowTitle(QWidget *parent);
    
    public slots:
        void showSmall();
    
        void showMaxRestore();
    
    protected:
        void mousePressEvent(QMouseEvent *e);
        void mouseMoveEvent(QMouseEvent *e);
        void mouseDoubleClickEvent(QMouseEvent *e);
    
    private:
        QToolButton *minimize;
        QToolButton *maximize;
        QToolButton *close;
        QPixmap restorePix, maxPix;
        bool maxNormal;
        QPoint startPos;
        QPoint clickPos;
    };
    #include "XMainWindowTitle.h"
    #include <QHBoxLayout>
    #include <QMouseEvent>
    #include <QStyle>
    #include <QLabel>
    
    XMainWindowTitle::XMainWindowTitle(QWidget *parent)
    {
        // 不继承父组件的背景色
        setAutoFillBackground(true);
        // 使用 Highlight 作为背景色
        setBackgroundRole(QPalette::Highlight);
    
        minimize = new QToolButton(this);
        maximize = new QToolButton(this);
        close= new QToolButton(this);
    
        QPixmap pix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
        close->setIcon(pix);
        close->setToolTip("close");
        close->setStyleSheet("QToolButton:hover{background-color:rgb(219,75,75);}");
    
        maxPix = style()->standardPixmap(QStyle::SP_TitleBarMaxButton);
        maximize->setIcon(maxPix);
        maximize->setToolTip("restore");
    
        pix = style()->standardPixmap(QStyle::SP_TitleBarMinButton);
        minimize->setIcon(pix);
        minimize->setToolTip("minsize");
    
        restorePix = style()->standardPixmap(QStyle::SP_TitleBarNormalButton);
    
        minimize->setMinimumSize(30,25);
        close->setMinimumSize(30,25);
        maximize->setMinimumSize(30,25);
    
        QLabel *label = new QLabel(this);
        label->setText("Window Title");
        parent->setWindowTitle("Window Title");
    
        QHBoxLayout *hbox = new QHBoxLayout(this);
    
        hbox->addWidget(label);
        hbox->addWidget(minimize);
        hbox->addWidget(maximize);
        hbox->addWidget(close);
    
        hbox->insertStretch(1, 500);
        hbox->setSpacing(0);
        setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    
        maxNormal = false;
    
        connect(close, SIGNAL( clicked() ), parent, SLOT(close() ) );
        connect(minimize, SIGNAL( clicked() ), this, SLOT(showSmall() ) );
        connect(maximize, SIGNAL( clicked() ), this, SLOT(showMaxRestore() ) );
    }
    
    void XMainWindowTitle::showSmall()
    {
        parentWidget()->showMinimized();
    }
    
    void XMainWindowTitle::showMaxRestore()
    {
        if (maxNormal) {
            parentWidget()->showNormal();
            maxNormal = !maxNormal;
            maximize->setIcon(maxPix);
        } else {
            parentWidget()->showMaximized();
            maxNormal = !maxNormal;
            maximize->setIcon(restorePix);
        }
    }
    
    void XMainWindowTitle::mousePressEvent(QMouseEvent *e)
    {
        startPos = e->globalPos();
        clickPos = mapToParent(e->pos());
    }
    void XMainWindowTitle::mouseMoveEvent(QMouseEvent *e)
    {
        if (maxNormal)
            return;
        parentWidget()->move(e->globalPos() - clickPos);
    }
    
    void XMainWindowTitle::mouseDoubleClickEvent(QMouseEvent *e)
    {
        if(e->button() == Qt::LeftButton)
        {
            showMaxRestore();
        }
    }
    

    #include "XMainWindowTitle.h"
    #include <QFrame>
    
    class XMainWindow : public QFrame
    {
    public:
    
        XMainWindow();
    
        // 通过 getter 允许外界访问 frame 的 content 区域
        // 其它子组件应该添加到这里
        QWidget *contentWidget() const ;
    
        XMainWindowTitle *mainWindowTitle() const ;
    
    protected:
        void mousePressEvent(QMouseEvent *e);
    
        void mouseMoveEvent(QMouseEvent *e);
    
        void mouseReleaseEvent(QMouseEvent *e);
    
    private:
        XMainWindowTitle *titleBar;
        QWidget *content;
        QPoint oldPos;
        bool mouseDown;
        bool left, right, bottom;
    };
    #include "XMainWindow.h"
    #include <QVBoxLayout>
    #include <QMouseEvent>
    #include <QDebug>
    
    XMainWindow::XMainWindow()
    {
        mouseDown = false;
        setFrameShape(Panel);
    
        setWindowFlags(Qt::FramelessWindowHint);
        setMouseTracking(true);
    
        titleBar = new XMainWindowTitle(this);
        titleBar->setCursor(Qt::ArrowCursor);
    
        content = new QWidget(this);
    
        content->setMouseTracking(true);
        QVBoxLayout *vbox = new QVBoxLayout(this);
        vbox->addWidget(titleBar);
        vbox->setContentsMargins(0,0,0,0);
        vbox->setSpacing(0);
    
        QVBoxLayout *layout = new QVBoxLayout;
        layout->addWidget(content);
        layout->setContentsMargins(5,5,5,5);
        layout->setSpacing(0);
        vbox->addLayout(layout);
    }
    
    QWidget *XMainWindow::contentWidget() const { return content; }
    
    XMainWindowTitle *XMainWindow::mainWindowTitle() const { return titleBar; }
    
    void XMainWindow::mousePressEvent(QMouseEvent *e)
    {
        oldPos = e->pos();
        mouseDown = e->button() == Qt::LeftButton;
    }
    
    void XMainWindow::mouseMoveEvent(QMouseEvent *e)
    {
        int x = e->x();
        int y = e->y();
    
        if (mouseDown) {
            int dx = x - oldPos.x();
            int dy = y - oldPos.y();
    
            QRect g = geometry();
    
            if (left)
                g.setLeft(g.left() + dx);
            if (right)
                g.setRight(g.right() + dx);
            if (bottom)
                g.setBottom(g.bottom() + dy);
    
            setGeometry(g);
    
            oldPos = QPoint(!left ? e->x() : oldPos.x(), e->y());
        } else {
            QRect r = rect();
            left = qAbs(x - r.left()) <= 5;
            right = qAbs(x - r.right()) <= 5;
            bottom = qAbs(y - r.bottom()) <= 5;
            bool hor = left | right;
    
            if (hor && bottom) {
                if (left)
                    setCursor(Qt::SizeBDiagCursor);
                else
                    setCursor(Qt::SizeFDiagCursor);
            } else if (hor) {
                setCursor(Qt::SizeHorCursor);
            } else if (bottom) {
                setCursor(Qt::SizeVerCursor);
            } else {
                setCursor(Qt::ArrowCursor);
            }
        }
    }
    
    void XMainWindow::mouseReleaseEvent(QMouseEvent *e)
    {
        mouseDown = false;
    }
    




    展开全文
  • Qt 之 自定义窗口标题栏

    万次阅读 多人点赞 2016-12-06 23:20:44
    今天晚上就如何用Qt自定义窗口标题栏,写了一个小例子,比较基础,实用。在此分享一下。 首先Qt是跨平台的,所以在不同的平台上窗口的外观是不一样的。比如在windows平台上,用Qt显示的一个窗口就跟一般windows程序...
  • [MFC]禁止双击标题栏最大化&还原

    千次阅读 2016-10-07 22:50:04
    引子用MFC写的程序,双击标题栏,程序会最大化,再次双击程序还原,如何禁止这样响应呢?其实这是需要自己对 WM_NCLBUTTONDBLCLK 的消息进行处理。具体做法重载 DefWindowProc( ) 函数,过滤WM_NCLBUTTONDBLCLK在...
  • // 标题栏 }; #include "CMainWindow.h" #include #include #include CMainWindow::CMainWindow(QMainWindow *parent)  : QMainWindow(parent)  , m_bMousePressed(false)  , m_nMouseResize(eCursorNormal) ...
  • 但是拖动,双击标题栏时窗体就会缩小。烦死了+_+。最后,终于找到了解决方法。//禁止通过拖动,双击标题栏改变窗体大小。 public const int WM_NCLBUTTONDBLCLK = 0xA3; const int WM_NCLBUTTONDOWN =
  • 来源于:http://www.cnblogs.com/chechen/p/5713718.html
  • 通过双击标题栏添加了最大化/取消最大化浮动窗口的功能,当然,通过单击并按住也可以移动它们 ...增加了像窗帘一样“卷起”和“下卷”客户端窗口的功能! 在标题栏上向上滚动以立即隐藏窗口内容,但将标题栏保持在...
  • 如何让MFC对话框不响应标题栏双击 新手,能否请大神说的详细下,谢谢啦
  • QWidget标题栏双击事件

    千次阅读 2017-04-11 10:46:27
    widget.h virtual bool event(QEvent *event);   widget.cpp bool Widget::event(QEvent *event) { ... if (event->type() == QEvent::NonClientAreaMouseButtonDblClick) ... qDebug()
  • c#代码 protected override void WndProc(ref Message m) { //拦截双击标题栏、移动窗体的系统消息 if (m.Msg != 0xA3 && m.Msg != 0x0003 && m.WParam != (IntPtr)0xF012) {
  • qt5 自定义标题栏

    2015-03-20 18:16:39
    用qt5写的自定义标题栏,做相应的改变也可以在其他版本运行,去掉了系统默认的标题栏,自己实现关闭,最大化,最小化,双击最大化最小化功能,这对标题栏的美化有帮助
  • C# 中双击标题栏关闭WinForm程序

    千次阅读 2012-07-31 11:39:33
    很简单的一个C#中双击标题栏关闭WinForm程序,估计很多人在写程序的时候用的着,程序代码只有段段的几行。 没有事件,只能通过重写WndProc,过滤需要的消息来实现: public const int WM_...
  • Qt实用技巧:自定义窗口标题栏

    万次阅读 2018-02-01 11:42:16
    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:... 目录 需求 原理 Demo下载地址 ...Qt实用技巧:自定义窗口标题栏 需求 制作窗口...
  • QT自定义窗口 自由拖动 自定义标题
  • 1:真正意义上的无边框自定义标题栏,支持最小化最大化关闭,支持标题栏双击实现,支持鼠标拖动,支持鼠标在边框处拖动改变窗体大小,网络上的绝大部分都是扯蛋,要么不支持鼠标改变界面大小,要么鼠标移到其它按钮...
  • Qt无标题栏窗口的平移,缩放,拉伸

    千次阅读 2019-06-17 18:02:14
    本文根据拦截自定义标题栏widget的事件,实现了通过移动标题栏进而移动整个窗口window,并且支持双击标题栏缩放整个窗口以及窗口边缘的拉伸功能。本文主要参考了Qt 之自定义界面(窗体缩放-跨平台终极版),在其基础...
  • protected override void WndProc(ref Message m)  {  //拦截双击标题栏、移动窗体的系统消息  if (m.Msg != 0xA3 && m.Msg != 0x0003 && m.WParam != (IntPtr)0xF012)  {

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,336
精华内容 10,134
关键字:

双击标题栏可以使窗口