wxWidgets自定义标题栏
做界面开发,很重要的就是一个用户体验,然而用户体验更多归结于界面舒适度。所以有了这篇内容。。。。为了界面的美化,自定义标题栏。
第一种方法
利用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自定义标题栏相关推荐
- WPF 自定义标题栏 自定义菜单栏
原文:WPF 自定义标题栏 自定义菜单栏 自定义标题栏 自定义列表,可以直接修改WPF中的ListBox模板,也用这样类似的效果.但是ListBox是不能设置默认选中状态的. 而我们需要一些复杂的UI ...
- 【Win10开发】自定义标题栏
UWP 现在已经可以自定义标题栏了,毕竟看灰色时间长了也会厌烦,开发者们还是希望能够将自己的UI做的更加漂亮,更加与众不同.那么废话不多说,我们开始吧! 首先要了解ApplicationViewTit ...
- android分享的主标题,Android 自定义标题栏(title栏)
近日 需要在android的标题栏上添加按钮,所以对android的标题栏进行了一下简单的研究- 第一步,向实现自定义标题栏,需要在onCreate方法里这样写 requestWindowFeatur ...
- pccad自定义图框_(PCCAD自定义标题栏详细方法.doc
PCCAD2011自定义标题栏详细方法 下面以图3-1为例说明标题栏的自定义过程. 图3-1 1.新建文件(用New 命令). 2.用绘图和文字中的相关命令设计出图3-1所示的图形.其中在使用中不变的 ...
- android 标题栏进度圈使用方法,Android 自定义标题栏 显示网页加载进度的方法实例...
这阵子在做Lephone的适配,测试组提交一个bug:标题栏的文字较长时没有显示完全,其实这并不能算个bug,并且这个问题在以前其他机器也没有出现,只是说在Lephone的这个平台上显示得不怎么美观, ...
- Android学习之自定义标题栏
一.如今好多的Android APP都在界面的顶部放置一个标题栏,标题栏里通常会有一两个按钮可用于返回和其它操作,虽然Android系统中已经给每个Activity提供了标题栏功能,但是这里介绍一下我 ...
- 安卓学习随笔 -- 自定义标题栏
在安卓中不喜欢系统默认的标题栏,那么如何让自定义一个自己的标题栏呢. 自定义后的标题栏如下: 首先这里需要定义一个自定义的标题栏布局 title.xml文件 (里边需要两个图片这个很简单) <R ...
- android标题栏上增加按钮,Android:向自定义标题栏添加按钮
我创建了一个自定义标题栏,如本例所示 "一个自定义标题栏" – 一半下来. 在某些活动中,我想在标题栏的右侧放置一个按钮(与facebook app相同).我试图按如下方式向视图添 ...
- android 刷新标题栏,Android 自定义标题栏的实例详解
Android 自定义标题栏的实例详解 开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮 ...
最新文章
- Linux下的buffer与cache
- e480换高分屏_全高清都不够用?是时候趁着双11上飞利浦的高分屏了
- 分布式系统基本副本协议
- PHP(三)——PHP基础知识
- 【做题记录】max-min+1=len 区间计数
- vista系统服务器,Vista系统中怎么设置IIS服务器
- 此上下文中不允许函数定义。_彻底搞懂上下文this,轻松应对,一面就过!!!...
- 考研分享:三战南大,考研的路上你从不孤独(内附500G最新考研资料分享)
- 分析微信聊天记录(1)——获取微信聊天记录
- win10和win11系统,手机或者其他设备连接不上电脑热点,一直在转圈圈的解决方法
- iOS6正式版不完美越狱教程(附安装讯飞输入法)
- Word里输入上下标五种方法
- python爬虫-批量下载qq音乐
- 锐龙r7 PRO 4700G、锐龙r5 PRO 4400G和锐龙r3 4200G 的区别
- 【计算机网络】(一)走进网络
- week-15(ZJM 与霍格沃兹)
- 【方案开发】汽车充气枪打气泵方案
- win10下如何装CH340驱动
- C++双人战争游戏(机房娱乐)
- Non-function value encountered for slot “reference“. Prefer function slots for better performance.