惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
J
Java Code Geeks
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
D
DataBreaches.Net
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
Y
Y Combinator Blog
博客园 - 【当耐特】
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
P
Proofpoint News Feed
量子位
C
Check Point Blog
F
Fortinet All Blogs
罗磊的独立博客
Last Week in AI
Last Week in AI
GbyAI
GbyAI
L
LangChain Blog
博客园 - 司徒正美

博客园 - BoyeeStudio

FLEX自定义事件 Flex Array 与 ArrayCollection.转自网络 PyAMF and django ForeignKey Django Push HTTP Response to users How to sync your github repository after fork from others'. N年没写博客了,手生锈了,准备再来磨磨! CAsyncSocket,CSocket内幕及其用法 Socket中如何设置连接超时(转载 可能用的到) 最近在我的python博客上花时间! P2P相关软件源代码下载 写个perl程序自动下载《南方周末》(2005年12月最后一期,38版,值得一看) wxWidgets开发工具及Makefile的书写!(待续。。。) 编VC网络程序遇到一个问题,原来是少了一个LIB。 如何优化C语言代码(程序员必读) 重温经典排序思想--C语言常用排序全解(转载--值得一看) 常用windows API WAP开发FAQ c++资源之不完全导引(全文) (转载) GNU编码标准
用wxWindows编程 -----第一步!(翻译)(系列1)
BoyeeStudio · 2005-12-24 · via 博客园 - BoyeeStudio


简要说明:

       为了毕业设计需要构建跨平台应用,近来一直在研究wxWidgets,觉得是很不错的图形包,所以开始着手对它进行研究,现把我最近的相关翻译文章陆续放到本专题中,由于本人翻译水平有限,有些地方欠妥,请有同好的朋友不吝指教!谢!
       本篇作品英文原站:http://www.bzzt.net/~wxwidgets/icpp_wx1.html
       学习对象:初中级学者

介绍

 我们现在着眼于另一个更友好的方式来构建窗口程序,我们使用一个类库集叫做wxWindows。严格来说,wxWindows绝不仅仅是类库,它是一个应用程序框架,这意味它在开发完整应用程序时提供一个使用类的构架。使用wxWindows的好处不停留在此,它还是一个跨平台的库。用wxWindows作者的话来讲:

什么是wxWindows

wxWindows给你一个简单,易用的API在多种平台上写GUI应用程序。为你的平台(Windows/Unix/Mac)连接适当的库然后编译(几乎所有流行的C++编译器),并且你的应用程序将采取相应平台的视觉外观。另外,对于大部分GUI功能性,wxWindows给你:在线帮助,网络编程,流,剪切板和拖放,多线程,多种格式的图片加载与保存,数据库访问,HTML视图与打印,还有很多很多。

wxWindows是一个很高品质工作接口,的确,有人使用术语“商业性质”来描述wxWindows,意味着为它而付出,值得!这当然不错,但如果有一评论对于wxWindows的构造,即,对于初学者,可能难以应付:开始的学习阶段有一点复杂。对于这一评论,乐观的反映表明:一旦编程人员领会wxWindows的架构,如它的类,函数和方法,写有用的应用程序是一件值得并相对来说是简单的过程。在财务开支上也值得,wxWindows是如此的一个富框架以致于几乎任何的应用领域都派得上用场。

你在阅读的同时,可能已猜到,我是一个忠实的wxWindows支持者。没错,我愿意把我对wxWindows所有热情同你交流,通过网络,网页。

我的计划是开始于一些非常基础,通过一系列的例子程序,解释wxWindows的架构,介绍wxWindows中的类库。当你完成这些,你应该已经对wxWindows有一个很好的领会。

开始之前,我有一些要强调的注意事项:

1)        我没有把我自己当成是一位特别优秀的程序员,也不是wxWindows特别的精通者,但我有一个好的表达方式,我确信我能够把复杂的主题解释清楚。

2)        你需要理解CC++但没必要很详尽。你在CC++上的能力随着你学习wxWindows会有所扩展。如果你已学过本网站上大部分C++资料,并且能够理解它,我认为你没问题了。

3)        你需要理解面向对象编程和类。同样,本网站大部分材料对你都很有帮助。

4)        开始的工作是在Windows平台上进行的,Win95.Win98Win2K都可以用。随wxWindowsMinGW包提供了开发环境。

如果你在C++编程上是一位初学者,这些包对你会很有用,但你想使用wxWidgets快速进入开发GUI程序的真实世界。进一步努力吧!

wxWidgets架构和第一个程序

这是切入点,刚开始时,我让所有事情简单点。

对于wxWidgets框架的第一印象是保持那种最简单的观念。随着我们开发的深入,我们对于这个框架的认识会变得更详细。


一个wxWidgets GUI程序的组成:


1)        一个应用程序(application)对象--一个wxApp 类的实例

2)        一个框架(frame)对象一个wxFrame类的实例。框架包含象菜单条(menubar),状态条(statusbar),图标(icon)等等。

3)        框架(frame)可能包含很多其它的对象像文本控件(text controls),按钮组(buttons),分隔条(splitters)等等。

我所拥有的最简单的程序仅仅是一个空的框架,在我们看来,这只是第一个基本的例子。对于想了解可能的用途是什么,这是合理的。如果没有其它的东西,并且展示了我们为什么第一次这样看它,是不是觉得很受益呢!你将看到它展示了常见的视窗应用所有行为。它有一个系统标标题,能够到处移动,可以改变大小并且可以被关闭。


我知道它看起来不太好但它是我们的!它还给我们展示了程序穿上了本地GUI的衣着。上面的图是在Windows98下的,不过别忘了wxWidgets是一个跨平台的框架,能够用来开发其它平台像Linux,OS2,Mac等等平台的应用程序。

第一个例子的源代码如下:

 1 #ifndef BASIC_H                                                //这是头文件。在这个基本框架中,我们声明了两个类:
 2 #define BASIC_H                                               //1)  BasicApplication   继承自wxApp
 3 class BasicApplication : public wxApp                     //2)  BasicFrame  继承自  wxFrame
 4 {        
 5 public:
 6 virtual bool OnInit();
 7 };
 8 class BasicFrame : public wxFrame
 9 {
10 public:
11 BasicFrame( const wxChar *title,
12 int xpos, int ypos,
13 int width, int height);
14 ~BasicFrame();
15 };
16 #endif
17

//*****************************************************************************
 //*我们为BasicFrame声明了一个构造函数和析构函数但我们为BasicAppliation做的唯一一件事是重载
 //*OnInit()方法
注意:我们正在重载我们所声明的方法是虚函数。
 //****************************************************************************

//****************************************************************************
//这是实现代码,类定义在上面的basic.h中。首先要注意的是宏:IMPLEMENT_APP(BasicApplication),
//这个,从我们的观点上看,是构造一个BasicApplication
对象并为我们的应用程序提供main切入点。它
//事实上取代前面我们在int WINAPI WinMain(...)函数中所做的所有的工作。
//OnInit()方法创建一个BasicFrame的实例,具有默认的参数x,y,width,height和一个标题。
//然后调用Show()方法显示框架。如果你看看wxFrame类,你不会发现Show()方法,wxFrame继承自
//wxWindows,Show()方法是wxWindows的一个成员函数。作为初学者,你必须对此牵记在心---因为
//很多这样的类继承自其它类不能不注意到在父类中用到的方法。
//OnInit()同进还调用SetTopWindow() 这个wxApp中的一个成员。
//构造函数和析构函数没有在我们的BasicFrame类中添加任何的新的行为。
//最后一个相关的文件是资源文件。在这个简单的例子中,我们没有添加任何我们自己的资源,但你
//应该总在最后添加一行,其中包含要用的资源文件:
//#include "wx/msw/wx.rc"
//在以后的例子中,我们添加进我们自己的资源。
//****************************************************************************
 1
 #include <wx/wx.h>
 2 #include "basic.h"
 3 IMPLEMENT_APP(BasicApplication)
 4 bool BasicApplication::OnInit()
 5 {
 6 BasicFrame
 7 *frame = new BasicFrame("Basic"5050450300);
 8 frame->Show(TRUE);
 9 SetTopWindow(frame);
10 return TRUE;
11 }
12 BasicFrame::BasicFrame
13 (const wxChar *title,
14 int xpos, int ypos,
15 int width, int height)
16 : wxFrame
17 ( (wxFrame *) NULL,
18 -1,
19 title,
20 wxPoint(xpos, ypos),
21 wxSize(width, height)
22 )
23 {
24 }
25 BasicFrame::~BasicFrame()
26 {
27 }
28
29 #include "wx/msw/wx.rc"