2、wxWidgets介绍–菜单栏、状态栏、图标简介

2、wxWidgets介绍–菜单栏、状态栏、图标简介wxWidgetswxWidgets是一个用来编写C++程序的GUI(图形用户界面)工具包。它是一个开源的、成熟的、跨平台的工具包。wxWidgets应用程序能在所有主流的操作系统上运行,Windo

大家好,又见面了,我是你们的朋友全栈君。

wxWidgets

wxWidgets是一个用来编写C++程序的GUI(图形用户界面)工具包。它是一个开源的、成熟的、跨平台的工具包。wxWidgets应用程序能在所有主流的操作系统上运行,Windows,Unix,Mac。这个项目由Julian Smart在1992年启动。wxWidgets提供各种各样的C++类来处理数据流、数据库、多线程、在线帮助、应用程序设置。wxWidgets由大量的窗口小部件组成。

接下来我们一步步的完成一个Hello World的窗口程序:

首先,搭建一个非常简单的框架:

 1 #include <wx/wx.h>
 2 
 3 class MyFrame : public wxFrame
 4 {
 5 public:
 6     MyFrame(const wxString& title): wxFrame(NULL, wxID_ANY, title) {}
 7 
 8 };
 9 
10 class MyApp : public wxApp
11 {
12 public:
13     virtual bool OnInit()
14     {
15         MyFrame * pframe = new MyFrame(wxT("Hello World"));
16         pframe->Show(true);
17         return true;
18     }
19 
20 };
21 IMPLEMENT_APP(MyApp)

执行结果:

<span role="heading" aria-level="2">2、wxWidgets介绍--菜单栏、状态栏、图标简介

特点:

  1. 没有main()函数,实际上是包含在wxWidgets框架中看不到。
  2. 一个应用程序类App,一个框架类Frame
  3. FrameAppOnInit()函数中实例化。
    注意:这里Frame没有销毁,可能会内存泄露(通常这么处理也不会有太大问题,因为窗口关闭时,OS会收回所有资源)。

然后给窗口添加状态栏

 1 #include <wx/wx.h>
 2 
 3 //框架类wxFrame
 4 class MyFrame : public wxFrame
 5 {
 6 public:
 7     MyFrame(const wxString& title): wxFrame(NULL, wxID_ANY, title)
 8     {
 9         //添加状态栏
10         CreateStatusBar();
11         //将状态栏分为两栏
12         //CreateStatusBar(2);
13         SetStatusText(wxT("Welcome to wxWidgets!"));
14     }
15 
16 };
17 
18 //应用程序类APP
19 class MyApp : public wxApp
20 {
21 public:
22     //Frame的实例化
23     virtual bool OnInit()
24     {
25         MyFrame * pframe = new MyFrame(wxT("Hello World"));
26         pframe->Show(true);
27         return true;
28     }
29 
30 };
31 //声明应用程序
32 IMPLEMENT_APP(MyApp)

添加菜单

 1 #include <wx/wx.h>
 2 
 3 //框架类wxFrame
 4 class MyFrame : public wxFrame
 5 {
 6 public:
 7     MyFrame(const wxString& title): wxFrame(NULL, wxID_ANY, title)
 8     {
 9         //定义菜单
10         wxMenu *menuFile = new wxMenu;
11         menuFile->Append(wxID_EXIT, wxT("Exit ... \tAlt+X"), wxT("Quit this program"));
12 
13         wxMenu *menuHelp = new wxMenu;
14         menuHelp->Append(wxID_ABORT, wxT("&About ... \tF1"), wxT("Show about frame"));
15 
16         //定义菜单栏
17         wxMenuBar *menuBar = new wxMenuBar;
18         
19         //向菜单栏添加菜单
20         menuBar->Append(menuFile, wxT("&File"));
21         menuBar->Append(menuHelp, wxT("&Help"));
22         
23         //将菜单栏添加到wxFrame中
24         SetMenuBar(menuBar);
25 
26         //添加状态栏
27         CreateStatusBar();
28         //将状态栏分为两栏
29         //CreateStatusBar(2);
30         SetStatusText(wxT("Welcome to wxWidgets!"));
31     }
32 
33 };
34 
35 //应用程序类APP
36 class MyApp : public wxApp
37 {
38 public:
39     //Frame的实例化
40     virtual bool OnInit()
41     {
42         MyFrame * pframe = new MyFrame(wxT("Hello World"));
43         pframe->Show(true);
44         return true;
45     }
46 
47 };
48 //声明应用程序
49 IMPLEMENT_APP(MyApp)

添加菜单事件、添加应用显示图标

 1 #include <wx/wx.h>
 2 #include "icon.xpm"
 3 
 4 //框架类wxFrame
 5 class MyFrame : public wxFrame
 6 {
 7 public:
 8     MyFrame(const wxString& title): wxFrame(NULL, wxID_ANY, title)
 9     {
10         //定义菜单
11         wxMenu *menuFile = new wxMenu;
12         menuFile->Append(wxID_EXIT, wxT("Exit ... \tAlt+X"), wxT("Quit this program"));
13 
14         wxMenu *menuHelp = new wxMenu;
15         menuHelp->Append(wxID_ABOUT, wxT("&About ... \tF1"), wxT("Show about frame"));
16 
17         //定义菜单栏
18         wxMenuBar *menuBar = new wxMenuBar;
19 
20         //向菜单栏添加菜单
21         menuBar->Append(menuFile, wxT("&File"));
22         menuBar->Append(menuHelp, wxT("&Help"));
23 
24         //将菜单栏添加到wxFrame中
25         SetMenuBar(menuBar);
26 
27         //添加状态栏
28         CreateStatusBar();
29         //将状态栏分为两栏
30         //CreateStatusBar(2);
31         SetStatusText(wxT("Welcome to wxWidgets!"));
32 
33         //设置应用显示图标
34         SetIcon(wxIcon(icon_xpm));
35 
36     }
37 
38     //定义事件处理函数
39     void OnQuit(wxCommandEvent& event);
40     void OnAbout(wxCommandEvent& event);
41 private:
42     //声明事件表
43     DECLARE_EVENT_TABLE()
44 };
45 
46 //应用程序类APP
47 class MyApp : public wxApp
48 {
49 public:
50     //Frame的实例化
51     virtual bool OnInit()
52     {
53         MyFrame * pframe = new MyFrame(wxT("Hello World"));
54         pframe->Show(true);
55         return true;
56     }
57 
58 };
59 //声明应用程序
60 IMPLEMENT_APP(MyApp)
61 
62 //定义事件表,完成事件和处理函数的映射
63 BEGIN_EVENT_TABLE(MyFrame, wxFrame)
64     EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
65     EVT_MENU(wxID_EXIT, MyFrame::OnQuit)
66 END_EVENT_TABLE()
67 
68 //事件处理函数的实现
69 void MyFrame::OnAbout(wxCommandEvent& event)
70 {
71     wxString msg;
72     msg.Printf(wxT("About hello wxWidgets"), wxVERSION_STRING);
73 
74     wxMessageBox(msg, wxT("About wxWidgets"), wxOK | wxICON_INFORMATION, this);
75 }
76 
77 void MyFrame::OnQuit(wxCommandEvent& event)
78 {
79     Close();
80 }

icon.xpm

 1 /* XPM */
 2 static const char * icon_xpm[] = {
 3 /* columns rows colors chars-per-pixel */
 4 "32 32 6 1",
 5 "  c black",
 6 ". c navy",
 7 "X c red",
 8 "o c yellow",
 9 "O c gray100",
10 "+ c None",
11 /* pixels */
12 "++++++++++++++++++++++++++++++++",
13 "++++++++++++++++++++++++++++++++",
14 "++++++++++++++++++++++++++++++++",
15 "++++++++++++++++++++++++++++++++",
16 "++++++++++++++++++++++++++++++++",
17 "++++++++              ++++++++++",
18 "++++++++ ............ ++++++++++",
19 "++++++++ ............ ++++++++++",
20 "++++++++ .OO......... ++++++++++",
21 "++++++++ .OO......... ++++++++++",
22 "++++++++ .OO......... ++++++++++",
23 "++++++++ .OO......              ",
24 "++++++++ .OO...... oooooooooooo ",
25 "         .OO...... oooooooooooo ",
26 " XXXXXXX .OO...... oOOooooooooo ",
27 " XXXXXXX .OO...... oOOooooooooo ",
28 " XOOXXXX ......... oOOooooooooo ",
29 " XOOXXXX ......... oOOooooooooo ",
30 " XOOXXXX           oOOooooooooo ",
31 " XOOXXXXXXXXX ++++ oOOooooooooo ",
32 " XOOXXXXXXXXX ++++ oOOooooooooo ",
33 " XOOXXXXXXXXX ++++ oOOooooooooo ",
34 " XOOXXXXXXXXX ++++ oooooooooooo ",
35 " XOOXXXXXXXXX ++++ oooooooooooo ",
36 " XXXXXXXXXXXX ++++              ",
37 " XXXXXXXXXXXX ++++++++++++++++++",
38 "              ++++++++++++++++++",
39 "++++++++++++++++++++++++++++++++",
40 "++++++++++++++++++++++++++++++++",
41 "++++++++++++++++++++++++++++++++",
42 "++++++++++++++++++++++++++++++++",
43 "++++++++++++++++++++++++++++++++"
44 };

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155292.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 少儿编程150讲轻松学Scratch(二)-制作过马路小游戏

    少儿编程150讲轻松学Scratch(二)-制作过马路小游戏前言今天为大家带来一款小游戏的制作教程,只要跟着步骤做,就能轻松地制作出属于自己的过马路小游戏。家长们可以用此教程指导孩子逐步完成,然后一起测试和游玩,再一起探究每处代码的逻辑意义。教程教程如下:打开Scratch程序后,默认就会有一只小猫角色,我们就使用它当我们游戏的主角,然后再添加一个汽车角色。而后编辑汽车的造型,点击右键菜单的复制命令,复制一个新的造型。在新造型右上角,点击左右翻转按钮,使车子翻转到车头向左。再分别修改两个造型的名称为A和B。然后新建角色私有的变量

    2022年6月19日
    29
  • mysql查看数据隔离级别_如何查看mysql数据库隔离级别

    mysql查看数据隔离级别_如何查看mysql数据库隔离级别CPUQuota=value该参数表示服务可以获取的最大CPU时间,value为百分数形式,高于100%表示可使用1核以上的CPU。与cgroupcpu控制器cpu.cfs_quota_us配置项对应。MemoryLimit=value该参数表示服务可以使用的最大内存量,value可以使用K,M,G,T等后缀表示值的大小。与cgroupmemory控制器…

    2022年5月9日
    45
  • js判断数组中是否包含某个元素_js判断是否在数组中存在

    js判断数组中是否包含某个元素_js判断是否在数组中存在方法1:arr.indexOf(element):判断数组中是否存在某个值,如果存在,则返回数组元素的下标(第一个元素),否则返回-1;letfruits=[“Banana”,”Orange”,”Apple”,”Mango”]leta=fruits.indexOf(“Apple”)console.log(a)//2方法2:array.includes(searcElement[,fromIndex]):判断数组中是否存在某个值,如果存在返回true,否则返回false;l

    2022年10月19日
    1
  • Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」

    Apache Struts2打开重定向/命令执行 CVE-2013-2251「建议收藏」昨日,著名JavaWeb框架Struts官方再发高危安全漏洞补丁升级(最新版本为:2.3.15.1),升级修补了多个安全漏洞,其中包括一个远程任意代码的高危安全漏洞,这些漏洞可以影响到Struts2.0.0-Struts2.3.15的所有版本。攻击者可以利用该漏洞,执行恶意Java代码,最终导致网站数据被窃取、网页被篡改等严重后果。基于Struts2使用广泛,目前很多网站还没有升级,另外

    2022年7月13日
    17
  • win7 计算机定时关机脚本,Win7制作定时关机bat脚本|Win7定时关机程序脚本

    win7 计算机定时关机脚本,Win7制作定时关机bat脚本|Win7定时关机程序脚本有些使用Win7系统的用户,平时使用电脑的时候,需要用到定时关机的功能,但是在电脑中,不知道哪里可以设置。这篇文章是PE吧给大家带来的Win7制作定时关机bat脚本方法教程。方法/步骤:1、在桌面,新建个文本文档,然后复制以下代码:@echooffat23:59shutdown-s-f-t60其中字母含义是:-s为shutdown关机,-f为force强制关机,-t60…

    2022年7月22日
    17
  • journalctl工具基础介绍

    journalctl工具基础介绍journalctl工具是CentOS-7才有的工具Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.confjournalctl用法查看所有日志(默认情况下,只保存本次启动的日志)journalctl查看内核日志(不显示应用日志)journalctl-k查看系统本次启动的日志

    2022年5月10日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号