做界面开发,很重要的就是一个用户体验,然而用户体验更多归结于界面舒适度。所以有了这篇内容。。。。为了界面的美化,自定义标题栏。

第一种方法

利用wxWidgets中自带的鼠标事件(QMouseEvent)

#pragma once#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/panel.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/string.h>
#include <wx/sizer.h>
#include <wx/dialog.h>//////
/// Class MyDialog
///
class MyDialog : public wxDialog
{private:wxPoint m_point;protected:wxPanel* m_panel;public:MyDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 402,288 ), long style = 0 );~MyDialog();void OnLeftDown(wxMouseEvent &event);void OnMove(wxMouseEvent &event);
};
MyDialog::MyDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{this->SetSizeHints( wxDefaultSize, wxDefaultSize );wxBoxSizer* bSizer1;bSizer1 = new wxBoxSizer( wxVERTICAL );m_panel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxSize( -1,30 ), wxTAB_TRAVERSAL );bSizer1->Add( m_panel, 0, wxALL|wxEXPAND, 5 );this->SetSizer( bSizer1 );this->Layout();this->Centre( wxBOTH );panel->Bind(wxEVT_LEFT_DOWN,MyDialog::OnLeftDown,this);panel->Bind(wxEVT_MOTION,MyDialog::OnMove,this);
}MyDialog::~MyDialog()
{panel->Unbind(wxEVT_LEFT_DOWN,MyDialog::OnLeftDown,this);panel->Unbind(wxEVT_MOTION,MyDialog::OnMove,this);
}void MyDialog::OnLeftDown(wxMouseEvent &event)
{m_point = event.GetPosition();
}void MyDialog::OnMove(wxMouseEvent &event)
{if (event.LeftIsDown()){int x = m_point.x - event.GetPosition().x;if (x < 0)x = x - 2;else if (x > 0)x = x + 2;int y = m_point.y - event.GetPosition().y;if (y < 0)y = y - 2;else if (y > 0)y = y + 2;this->Move(this->GetScreenPosition() + wxPoint(-x,-y));
}

这种方法:实际效果会发生窗口抖动。

第二种方法:

#pragma once#include <wx/artprov.h>
#include <wx/xrc/xmlres.h>
#include <wx/panel.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/string.h>
#include <wx/sizer.h>
#include <wx/dialog.h>//////
/// Class MyDialog
///
class MyDialog : public wxDialog
{protected:wxPanel* m_panel;public:MyDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 402,288 ), long style = 0 );~MyDialog();void OnMove(wxMouseEvent &event);
};
MyDialog::MyDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
{this->SetSizeHints( wxDefaultSize, wxDefaultSize );wxBoxSizer* bSizer1;bSizer1 = new wxBoxSizer( wxVERTICAL );m_panel = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxSize( -1,30 ), wxTAB_TRAVERSAL );bSizer1->Add( m_panel, 0, wxALL|wxEXPAND, 5 );this->SetSizer( bSizer1 );this->Layout();this->Centre( wxBOTH );panel->Bind(wxEVT_MOTION,MyDialog::OnMove,this);
}MyDialog::~MyDialog()
{panel->Unbind(wxEVT_MOTION,MyDialog::OnMove,this);
}void MyDialog::OnMove(wxMouseEvent &event)
{if (event.LeftIsDown()){if (ReleaseCapture())SendMessage(GetHwnd(), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);}
}

这种方法采用wxWidgets自带鼠标移动事件结合win32API接口发送系统菜单消息关于移动窗口的命令给系统。

wxWidgets自定义标题栏相关推荐

  1. WPF 自定义标题栏 自定义菜单栏

    原文:WPF 自定义标题栏 自定义菜单栏 自定义标题栏 自定义列表,可以直接修改WPF中的ListBox模板,也用这样类似的效果.但是ListBox是不能设置默认选中状态的. 而我们需要一些复杂的UI ...

  2. 【Win10开发】自定义标题栏

    UWP 现在已经可以自定义标题栏了,毕竟看灰色时间长了也会厌烦,开发者们还是希望能够将自己的UI做的更加漂亮,更加与众不同.那么废话不多说,我们开始吧! 首先要了解ApplicationViewTit ...

  3. android分享的主标题,Android 自定义标题栏(title栏)

    近日 需要在android的标题栏上添加按钮,所以对android的标题栏进行了一下简单的研究- 第一步,向实现自定义标题栏,需要在onCreate方法里这样写 requestWindowFeatur ...

  4. pccad自定义图框_(PCCAD自定义标题栏详细方法.doc

    PCCAD2011自定义标题栏详细方法 下面以图3-1为例说明标题栏的自定义过程. 图3-1 1.新建文件(用New 命令). 2.用绘图和文字中的相关命令设计出图3-1所示的图形.其中在使用中不变的 ...

  5. android 标题栏进度圈使用方法,Android 自定义标题栏 显示网页加载进度的方法实例...

    这阵子在做Lephone的适配,测试组提交一个bug:标题栏的文字较长时没有显示完全,其实这并不能算个bug,并且这个问题在以前其他机器也没有出现,只是说在Lephone的这个平台上显示得不怎么美观, ...

  6. Android学习之自定义标题栏

    一.如今好多的Android APP都在界面的顶部放置一个标题栏,标题栏里通常会有一两个按钮可用于返回和其它操作,虽然Android系统中已经给每个Activity提供了标题栏功能,但是这里介绍一下我 ...

  7. 安卓学习随笔 -- 自定义标题栏

    在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <R ...

  8. android标题栏上增加按钮,Android:向自定义标题栏添加按钮

    我创建了一个自定义标题栏,如本例所示 "一个自定义标题栏" – 一半下来. 在某些活动中,我想在标题栏的右侧放置一个按钮(与facebook app相同).我试图按如下方式向视图添 ...

  9. android 刷新标题栏,Android 自定义标题栏的实例详解

    Android 自定义标题栏的实例详解 开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮 ...

最新文章

  1. Linux下的buffer与cache
  2. e480换高分屏_全高清都不够用?是时候趁着双11上飞利浦的高分屏了
  3. 分布式系统基本副本协议
  4. PHP(三)——PHP基础知识
  5. 【做题记录】max-min+1=len 区间计数
  6. vista系统服务器,Vista系统中怎么设置IIS服务器
  7. 此上下文中不允许函数定义。_彻底搞懂上下文this,轻松应对,一面就过!!!...
  8. 考研分享:三战南大,考研的路上你从不孤独(内附500G最新考研资料分享)
  9. 分析微信聊天记录(1)——获取微信聊天记录
  10. win10和win11系统,手机或者其他设备连接不上电脑热点,一直在转圈圈的解决方法
  11. iOS6正式版不完美越狱教程(附安装讯飞输入法)
  12. Word里输入上下标五种方法
  13. python爬虫-批量下载qq音乐
  14. 锐龙r7 PRO 4700G、锐龙r5 PRO 4400G和锐龙r3 4200G 的区别
  15. 【计算机网络】(一)走进网络
  16. week-15(ZJM 与霍格沃兹)
  17. 【方案开发】汽车充气枪打气泵方案
  18. win10下如何装CH340驱动
  19. C++双人战争游戏(机房娱乐)
  20. Non-function value encountered for slot “reference“. Prefer function slots for better performance.

热门文章

  1. 双势齐发 维也纳酒店欧暇·地中海闪耀2022锦江行
  2. ElasticSearch学习_陶文1_时间序列数据库的秘密(1)—— 介绍
  3. numpy中的ravel()方法使用介绍
  4. 离散数学复习要点(屈婉玲版教材)
  5. Kotlin String 正则表达式,快速测试正则表达式
  6. DeprecationWarning: use options instead of chrome_options
  7. cgb2109-day18
  8. 每种排序算法趟的特点
  9. cozmo玩耍记录1
  10. C语言进阶——likely和unlikely