浅谈 wxWindows FrameWork

wxWidgets随笔(11)-wxFrame类 wxFrame类是一个窗口,它的大小和位置(通常)可以由用户更改。 它通常有粗粗的边框和标题栏,还可以包含菜单栏、工具栏和状态栏。框架可以包含任何不是框架或对话框的窗口。 通过CreateStatusBar()和CreateToolBar()函数创建的具有状态栏和工具栏的框架管理这些窗口并调整GetClientSize()返回的值,以反映应用程序窗口可用的剩余大小。 应用程序通常应该为框架定义一... 阅读详情

  最近看了Borland C++BuilderX的报道,发现这次的版本使用的是wxWindows做为FrameWork。十分惊讶,因为我在一年以前就使用wxWindows了。不过在当时,包括最近有关它的国内报道还是很少。
  wxWindows是一个C++的扩展库。是一个OpenSource项目,而且支持多平台。所以,你完全可以从OpenSource的网站上免费获得各个平台的版本和源代码。而对于wxWindows的官方网站www.wxWindows.org我一年来从未一睹其芳容,——网站无法访问。但是尽管如此,并不影响我们获得它。这多亏了OpenSource的力量。
  wxWindows最吸引我的是它简洁的代码——几行简单的代码,随心所欲的派生。一个窗口就诞生了。一个用API要近100行的效果。用wxWindows最多十几行就可以解决问题。我想这也或许是Borland选择它的原因之一吧。wxWindows对于各种常用控件和繁琐的功能都分别封装成了类。使用的时候只要加一行代码就可以使用了。像

wxButton *p_b = new wxButton(frame,-1,"Button");

就是在frame窗口中绘制一个写有Button的按钮。以后的访问只要使用

p_b->//要调用的函数

就可以对按钮进行操作了。我想直接用API就没有那么方便了吧。其实在简单的背后,wxWindows为你默默的做了许多的工作。虽然你也可以在wxWindows中对这些工作全面接手。但是,有些时候根本没有必要那么做。当然,如果你对wxWindows的控件不满意的话,完全可以用wxWindows派生出自己的控件。比如你对主窗口不满意——只有一块深灰色。你完全可以生成一个自己的主窗口,方法如下:

Class MyFrame:Public wxFrame
{
public:
 MyFrame(int width,int height);
};
MyFrame::MyFrame(int width,int height)
 :wxFrame((wxFrame)*NULL,wxPoint(0,0),wxSize(width,height))
{
 //你为MyFrame所添加的控件等。
}

从上面的代码,可以看出。wxWindows灵活的类管理。
  我钟情于wxWindows的另一个理由是它与C++标准库的兼容和健全的非窗口类。比如,在wxWindows中我最喜欢的是wxString,它是我见到的最健全的String类之一。它不但可以与wx完全兼容,也可以与C++标准兼容。在C++中,wxString更像一个灵活多变的Char列。你可以像Char那样使用它。而无需考虑内存的事先分配等问题。而且,在某些方面,它比char更强大。
  当然,对于多平台的支持也是我喜欢它的原因。wxWindows有多平台的版本。我使用的是MSW的。当然也有 Mac X11 GTK MGL等许多平台的。如果你要让你的代码在其他的平台上使用。那么你只要在编译的时候修改一下附带的语句。将有关平台的参数改变一下就可以了。对于代码,只要没有使用在特定平台下的功能,就能不修改代码直接使用。当然,wxWindows不只是对各个操作系统有支持。由于它是OpenSource的。所以,通常,其他非C++语言也会使用它的。比如 wxPython就是wxWindows对Python的版本。wxPerl是对Perl的版本。在这些不同的语言中的wxWindows,力求保持它原有的编程风格和思路,而且他们也做到了。所以,你会wxWindows就等于会了wxPython,wxPerl。说到这里,我想说一些题外话。我也用python+wxPython做一些桌面的小玩具,不仅如此,在我要用wxWindows开发界面的时候,会使用wxPython先事先写好界面的代码。然后,确定好后,再机械的灌到我的C++代码中。由于Python是解释性语言,所以与C++相比少了编译,连接的开发周期。写完代码直接运行就可以了。所以,节省了不少的开发时间。这不失为一种减少开发周期,加快开发速度的好方法。下面我们来看看wxPython和wxWindows在实现相同功能上有多大的相同。
//C++ Source
#include

class MainApp:public wxApp
{
public:
 virtual bool OnInit(void);
private:
 wxFrame *mainFrame;
};
IMPLEMENT_APP(MainApp)

bool MainApp::OnInit(void)
{
 mainFrame = new wxFrame((wxFrame*) NULL,-1,"Hello wxWindows");
 mainFrame->Show(TRUE);
 SetTopWindow(mainFrame);
 return TRUE;
}


#Python Source
from wxPython.wx import *

class MainApp(wxApp):
 def OnInit(self):
  mainFrame=wxFrame(NULL,-1,"Hello wxWindows")
  mainFrame.Show(true)
  self.SetTopWindow(mainFrame)
  return true
app=MainApp(0)
app.MainLoop()

从上面的代码,我们可以看到。对于wxWindows和wxPython的界面实现方法几乎是相同的。不同的只是在有关变量的声明,和C++与Python自身的语法不同。
  接下来,说说wxWindows支持的C++的IDE环境。既然Borland C++BuildX已经使用了wxWindows那么Borland的C++编译器应该支持吧。其实,事实也是如此。Borland C++ 4.5和5.0都支持。对于使用最广的VC的IDE环境自然也必须支持了。支持的有1.5,4.0,5.0和6.0。当然,其实.Net下也可以使用wxWindows。至少我使用下来没有问题。另外,使用GCC的Dev-CPP也对它有很好的支持,甚至还为wxWindows专门打了一个包。直接使用Dev-CPP的包管理就可以安装并使用了。以上只是一些可以使用wxWindows的IDE环境,还有很多,在此不一一介绍了。有关更多的介绍,可以看看wxWindows的自带文档,在里面有详细的介绍和对于不同环境的安装方法。
  对于wxWindows中值得称赞的是它的说明文档。可以这样说,它的自带的文档从教程到查询文档一应俱全。要知道,作为一个开源项目,免费维护的项目,文档能够如此详细和完整真是难得。所以,在没有中文文档的时候,我就是阅读这些英文文档来学习的。而且,直到现在,我每次看这些文档的时候都会有许多新的感悟。而且,另一个值得说明的是,wxWindows 2.4.0,wxWindows 2.4.1等这些不同版本的wxWindows虽然之间有很多的改进。但是,使用的介绍文档等几乎没有改变。这也正说明了它语法的稳定。不至于一个新的版本会造成过去代码的不可用。所以,你完全不用担心你的代码由于版本的问题,会造成他人在阅读和编译上的困难。
  对于,多平台的运行机制。我想我也要简单介绍一下。毕竟我想这个也是我们需要关注的问题。如果,你仔细看看wxWindows的include/wx目录,你会看到有诸如 msw unix 等目录。其实,在你导入wxWindows文件的时候,wxWindows会更具不同的平台选择不同的文件。下面是include/wx/button.h中63行的一段代码。

#if defined(__WXUNIVERSAL__)
    #include "wx/univ/button.h"
#elif defined(__WXMSW__)
    #include "wx/msw/button.h"
#elif defined(__WXMOTIF__)
    #include "wx/motif/button.h"
#elif defined(__WXGTK__)
    #include "wx/gtk/button.h"
#elif defined(__WXMAC__)
    #include "wx/mac/button.h"
#elif defined(__WXPM__)
    #include "wx/os2/button.h"
#elif defined(__WXSTUBS__)
    #include "wx/stubs/button.h"
#endif

由上面的代码,可以看到,如果你向编译器传送的是__WXMSW__的时候,button.h会从msw文件夹中继续导入button.h。这就是wxWindows支持多平台的方法。所以,wxWindows的运行机制,更像是一个解释器的运行机制。不论平台如何改变,编写的人无需考虑平台的问题,解释器会更具不同的平台,将相同的代码转换成不同的命令。
  当然,世界上的任何事物都是由两面性的,像wxWindows也有它的缺点。首先,使用wxWindows的界面,往往体积比较大,基本在1M以上。而且,会随界面的复杂而上升。不过,这主要取决于你使用的头文件的多少。通常不会有突变的情况。当然,这也不是不可以改变的。如果用ZIP等压缩一下的话,通常都会只有原来的50%或者更低30%我像,这或许是取决于编译器和代码自身的问题。应该可以解决的。另外,wxWindows的简化也会给使用的人带来不少的麻烦。比如:

wxNotebook *p_note = new wxNotebook(frame,-1);
p_note->AddPage(new wxPanel(frame,-1),"1");
p_note->AddPage(new wxPanel(frame,-1),"2");
p_note->DeletPage(0);

如果,你没有使用过或者刚使用wxWindows,一定会以为这个代码会造成内存泄漏。因为,没有显式删除new生成的内存空间。最初我也是这样想的,但是后来才发现。wxWindows会自动为你在DeletPage(0)时删除new占用的空间。对于用惯C++的人来说,这的确会造成一些混乱。不过,这也是wxWindows的好心被人误解了吧。最后的问题是wxWindows在某些方面的不灵活。比如,要设计一个不规则的窗口就几乎是不太可能的。而且,不如wxTextCtrl中的右键菜单是英文的,修改他的确也有些麻烦。以上是我使用wxWindows时发现的一些问题。不过,既然Borland使用了wxWindows。我想wxWindows会越来越更完善的。
  最后,感谢各位的阅读。希望各位前辈能为小生的文章多多指教。我想以后wxWindows不只是C++BuildX的专利。你也可以在你喜欢的IDE中使用wxWindows。


STUDIO软件开发组
站长:北斗星君(黄庠魁)

 

wxWidgets:wxFrame类用法 wxWidgets:wxFrame类用法wxWidgets:wxFrame类用法用法详细说明 wxWidgets:wxFrame类用法 用法详细说明 #include <wx/frame.h> wxFrame的继承图 框架是一个窗口,其大小和位置可以(通常)由用户更改。 它通常具有粗边框和标题栏,并且可以选择包含菜单栏、工具栏和状态栏。框架可以包含任何不是框架或对话框的窗口。 具有状态栏和工具栏的框架,通过CreateStatusBar()和CreateToolBar()函数创建,管理这些窗口 阅读详情

相关推荐

wxMSW-2.4.2-setup.zip_wxMSW_wxWindows 2.4_wxWindows-2_wxmsw2.4_w

wxwindows 安装程序,c++核心思想中的类似与,MFC的UI开发工具!

wxPython中wx.Frame用法

wx.Frame是一个可以手工设置大小和位置的窗体对象,默认情况下具有粗边框和标题栏,同时可以创建并自定义菜单栏、工具栏和状态栏。wx.Frame也是一个容器,可以包含面板对象、控件对象以及子窗体对象等。

MissYuanxi的博客 2286

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 334

【wxWidgets教程】窗体:wxFrame创建与使用技巧

本文介绍了wxWidgets框架中的wxFrame窗体类及其使用方法。wxFrame是wxWidgets应用程序的核心容器类,用于承载各类GUI控件。

万法若空 1275

在 Ubuntu 22.04 上配置 SonarQube 与 CI/CD 流水线实现自动化代码审查

本文详细介绍了在Ubuntu 22.04系统上配置SonarQube并与CI/CD流水线集成的完整流程,实现自动化代码审查。从环境准备、数据库配置到核心参数调优,再到与Jenkins和GitHub Actions的深度集成,提供了实战技巧和性能优化建议,帮助团队提升代码质量监控效率。

weixin_28829325的博客 258

利用易特天下 ipbox&零层壹号 sdwan 组网盒子实现异地组网

一款支持zerotier的异地组网盒子

v808v808的博客 3348

wxpython设计GUI:窗口Frame最大化、最小化、关闭及全屏显示的说明

在用户实际使用窗口时必然涉及到窗口的最大化、最小化、是否全屏显示及窗口关闭操作。

Logintern09的博客 3599

FM收音机调试-RDA5807M

收音机调试 IC型号:RDA5807M

mangofu的博客 6163

【wxWidgets教程】窗体:wxFrame构造函数详解

wxFrame构造函数详解:该函数用于创建框架窗口,包含多个关键参数:1. parent参数指定父窗口指针,控制窗口层级关系;2. id参数采用wxWindowID类型,支持自动ID生成和引用计数管理;3. title参数设置窗口标题;4. pos和size参数控制窗口位置和尺寸;5. style参数支持多种窗口样式组合,包括标题栏、边框、按钮等控制选项;6. name参数指定窗口名称。特别说明窗口ID管理机制采用wxWindowIDRef实现引用计数,以及wxRegion类支持创建不规则形状窗口的功能。

万法若空 910

Xilinx FPGA平台DDR3设计保姆式教程(1)DDR3基础简介

xilinx平台DDR3设计(1)DDR3简介 如果我们只是拿来用ddr搬砖,那么它就简单,知道IP怎么使用就好,但是要想知其所以然,理论知识是必备的,这也是我们初学者所欠缺的东西,慢慢修炼吧! 目录 一、DDR3简介 二、地址的概念及容量计算 三、重要给概念理解 3.2 列地址脉冲选通潜伏期 3.4 掩码 四、参考资料 一、DDR3简介 DDR3全称double-data-rate 3 synchronous dynamic RAM,即第三代双倍速率同步动态随机存储器。...

数字IC/FPGA杂货铺,找一找,或许有你想要的~ 1万+

用urdf给自己的ROS小车编写模型

3.3 使用urdf编写自己的ROS小车模型 3.3.1 常见的ROS小车结构有哪些? 下面就是常见的ROS小车,相信在大家的脑海里已经有了自己小车的样子,下面我和大家一起使用urdf对ros小车建模。 这里只对urdf进行简单介绍,然后就带大家使用urdf最基础的标签,建立机器人的urdf机器人模型。关于更多细节,请参看官网:http://wiki.ros.org/urdf/Tutorials 3.3.2 什么是urdf?建模的原因? 什么是urdf? URDF(Unified Robot Descri

「小白学移动机器人」一个专注分享移动机器人相关知识的公众号! 1万+

wxWidget学习笔记二:wxFrame

wxFrame是一个框架窗口,默认提供粗的边框和标题栏,可以从此类派生出xxFrame,实现新的外观。 以下函数建立标准的窗口物件: 工具栏:CreateToolBar();状态栏:CreateStatusBar(int number);菜单栏要复杂一点:首先在xxFrame中声明两种类型的指针,wxMenuBar对应菜单条,wxMenu对应每个子菜单。需要注意的是这两种对象 必须

熊宝宝爱吃鱼 2738

MATLAB基础应用精讲-【图像处理】GNN图神经网络(附python代码实现)

图神经网络由于其在处理非欧空间数据和复杂特征方面的优势,受到广泛关注并应用于推荐系统、知识图谱、交通道路分析等场景。图结构可描述复杂关系,如基因结构、通信网络、交通路线、社交网络等。图计算挖掘结构信息,但无法学习节点特征。神经网络在欧氏空间数据上表现优越,但无法直接应用于非欧氏空间的图数据。图神经网络结合图计算和神经网络优势,处理非欧氏空间数据及其复杂特征,应用于网络链接预测、推荐系统和交通道路分析等场景。实际应用中,图数据规模庞大,如百亿级节点、千亿级边,存储开销超过10TB。

qq_36130719的博客 1138

wxython简单入门加实例2:wx.Frame

wx.Frame 是一个容器构件。这意味着它可以容纳其它构件。它有如下的构造器: wx.Frame( wx.Window parent, id, string title, wx.Point pos=wx.DefaultPosition, wx.Size size=wx.DefaultSize, style = wx.DEFAULT_FRAME_STYEL, string name='f

sanlihe302的专栏 939

OSCP-1-3-natraj(本地文件包含、日志中毒、apache2配置漏洞、nmap提权)

像往常一样,我们将使用“Netdiscover”工具识别主机的 IP。所以,让我们首先用 nmap 列出所有 TCP 端口。我们从访问web服务(80端口)开始,在那里我们找到了几张关于Natraj的图片和信息,我们将查看源代码和robots.txt,似乎没有什么有用的。(或至少,目前)。因此,让我们继续进行。在 Dirb 及其默认字典的帮助下,我们找到了一个名为“”的目录。我们进入并列出一个名为“”的文件:如果我们执行它,我们会看到它什么也不做。我们可能需要添加其他内容。

墨痕诉清风的博客 528

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

wxpython学习笔记之wx.Frame

当创建wx.Frame的子类时,类应该调用其父类的构造器 wx.Frame.__init__()。wx.Frame的构造器所要求的参数如下: wx.Frame(parent, id=-1, title=” ”, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE,name=”frame”) 参数说明: parent:框架的父类,对于顶层窗口(SetTopW...

qq_41098957的博客 4329

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

wxPython中文教程 简单入门加实例

wx.Window 是一个基类,许多构件从它继承。包括 wx.Frame 构件。技术上这意味着,我们可以在所有的   子类中使用 wx.Window 的方法。我们这里介绍它的几种方法: * SetTitle( string title ) —— 设置窗口标题。只可用于框架和对话框。 * SetToolTip( wx.ToolTip tip ) —— ...

Just Code 1072

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

wxWindows一些网文

http://www.linuxfans.org/bbs/thread-115203-1-1.htmlinux公社论坛 » 应用编程技术与项目孵化 » (转)wxWindows一些网文 ‹‹ 上一主题 | 下一主题 ›› (转)wxWindows一些网文

skyremember的专栏 2283

使用C++开发wxWidgets程序

 不知道原文地址,给出获得这篇文章的地址:http://kylix.linuxaid.com.cn/book/wxWindowstut/wxTutorial.html 这篇文章对于初学者非常有帮助 if (window.showTocToggle) { var tocShowText = "显示"; var tocHideText = "隐藏"; showTocToggle

蜗牛档案室 7750

wxPython开发总结---Frame,Panel以及一种项目架构

关注公众号“码农帮派”,查看更多系列技术文章: 前一段时间用Python开发了一个教育类的PC桌面应用,边学边开发,现在陆续的将开发过程中学到的一些东西分享记录下来,项目使用了wxPython框架。 wxPython的官网:https://www.wxpython.org/ wxPython各种控件用法官方手册 :http://xoomer.virgilio.it/i...

天马行空的专栏 1万+

wxPython in Action(六十六)

8.2 使用框架框架包含了许多方法和属性。其中最重要的是那些查找框架中任意窗口部件的方法,和滚动框架中内容的方法。在这一节,我们将讨论如何实现这些。8.2.1 wx.Frame有那些方法和属性?这部分中的表包含了wx.Frame和它的父类wx.Window的最基本的属性。这些属性和方法的许多在本书中的其它地方有更详细的说明。表8.4包含了wx.Frame的一些公共的可读、可修改的属性。表8.4 w

513

windows下 搭建 wxWidgets 开发环境

codeblocks 搭建 wxWidgets : 经过网上的多次搜索整理,整理有一个最简便的配置方式,如下: 1:http://wxpack.sourceforge.net/Main/Downloads //wxPack下载(我下载的是wxPack_v2.8.12.01.exe),这样就不用下载wxMSW安装包或源码编译了; 2:wxWidgets可以和VC配合,但是这样配置麻烦不说,而且

chinabinlang的专栏 6837

Visual Studio 2008 配合 WxWidgets

一、下载并解压缩wxWidgets   1. 到 http://www.wxwidgets.org/downloads 下载一个wxMSW版本的wxWidgets。(wxMSW是专门针对Windows系统)   PS:这里推荐解压缩版:http://prdownloads.s

moyumoyu的专栏 761

wxWidgets与其他工具库的比较(上)

本文是在wxWidgets Wiki上面找到的一篇,对比了wxWidgets和其他一些界面工具的特点。看到很多朋友在网上询问这些库各自的特点,我想先把这篇文章翻译出来——毕竟这也算是一篇官方的文章,应该比较有说服力吧!这篇文章写于2004年左右,但是很明显某些地方已经更新了,因为Qt 4.5是2009年才发布的! 这是我第一篇翻译,哪里翻译不好敬请谅解! 原文...

weixin_33909059的博客 928
上一篇: 普通高中生眼中的中国IT的现在与发展
下一篇: 略谈Python语言(最强的脚本语言)
VisionCat
博客等级 码龄24年 459粉丝 83原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值