龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

使用wxdindows开发跨平台的界面

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
使用wxdindows开发跨平台的界面 无双 发表于loveunix.net mushuang.forumer.com Linuxsir.com 转载请保留出处 使用wxwindows开发的一个例子 添加新的投票 订阅此主题 邮寄此主题 打印此主题 无双 发帖

  使用wxdindows开发跨平台的界面

  

  

无双

  

发表于loveunix.net

  

mushuang.forumer.com

  

Linuxsir.com

  

  

转载请保留出处

  

  

使用wxwindows开发的一个例子

  

添加新的投票 订阅此主题 邮寄此主题 打印此主题

  

无双

  

发帖时间 2004-04-01 21:21:36

  

  

  

天才猪

  

  

  

组别: 治理员

  

金钱: 3555 两

  

帖子数量: 1036

  

精华帖数: 47

  

注册时间: 2003-09-16

  

  

  

  

  

照着例子进行了半个小时

  

写出了一个简单的例子 当然后面会在它上面添加功能 目标是实现一个邮件客户端(与linuxaid的某兄打赌的 欢迎大家参与 假如想参与的话分一下工好了 )

  

  

WxWindows开发十分简单 我觉得比使用mfc还要简单

  

主程序的入口是wxApp 类的派生类

  

界面的入口是wxFrame的派生类

  

事件可以像是windows那样使用宏定义的方法

  

也可以通过设置事件处理的函数进行调用 (前几天写了个小程序 假如兴奋的话 在这里找就是 )

  

  

另外wxWindows有丰富的文档 这几天wxwindows.sf.net上不去了 不知道为什么又把sf给封了 不过其它地方也有不少好文档 照写就是了 让你体会到快速开发界面的感觉

  

  

makefile

  

这个Makefile是在linux下的 照它的例子抄了一个

  

  

  

代码

  

  

#

  

# File: Makefile for samples

  

# Author: Robert Roebling

  

# Created: 1999

  

# Updated:

  

# Copyright: (c) 1998 Robert Roebling

  

#

  

# This makefile requires a Unix version of wxWindows

  

# to be installed on your system. This is most often

  

# done typing "make install" when using the complete

  

# sources of wxWindows or by installing the two

  

# RPM packages wxGTK.XXX.rpm and wxGTK-devel.XXX.rpm

  

# under Linux.

  

#

  

  

CXX = $(shell wx-config --cxx)

  

  

PROGRAM = MailFox

  

  

OBJECTS = $(PROGRAM).o MainGUI.o

  

  

# implementation

  

  

.SUFFIXES: .o .cpp

  

  

.cpp.o :

  

$(CXX) -c `wx-config --cxxflags` -o $@ $<

  

  

all: $(PROGRAM)

  

  

$(PROGRAM): $(OBJECTS)

  

$(CXX) -o $(PROGRAM) $(OBJECTS) `wx-config --libs`

  

  

clean:

  

rm -f *.o $(PROGRAM)

  

  

  

这个帖子已被 无双 于 2004-04-01 21:23:13 编辑

  

  

  

--------------------

  

偶还是愿意看提问时写清楚问题与标题的贴子:D

  

IP: [ ---------- ]

  

无双

  

发帖时间 2004-04-01 21:24:37

  

  

  

天才猪

  

  

  

组别: 治理员

  

金钱: 3555 两

  

帖子数量: 1036

  

精华帖数: 47

  

注册时间: 2003-09-16

  

  

  

  

  

应用程序类 这是主程序入口 这个类对程序和界面进行初始化

  

  

Oninit是初始化函数 可以看wxwindows定义

  

  

代码

  

  

#ifndef MAILFOX_H_

  

#define MAILFOX_H_

  

  

class MailFox:public wxApp{

  

public:

  

virtual bool OnInit();

  

};

  

  

#endif

  

  

  

--------------------

  

偶还是愿意看提问时写清楚问题与标题的贴子:D

  

IP: [ ---------- ]

  

无双

  

发帖时间 2004-04-01 21:29:11

  

  

  

天才猪

  

  

  

组别: 治理员

  

金钱: 3555 两

  

帖子数量: 1036

  

精华帖数: 47

  

注册时间: 2003-09-16

  

  

  

  

  

  

应用程序入口 看起来很简单

  

创建界面也很简单 就只是声明了wxFrame的继续类

  

并使用Show()让它显示

  

使用SetTopWindow 设置这个窗口为应用程序的主窗口

  

代码

  

  

// author:wushuang

  

// 2004/04/01

  

// GPL

  

// desc: mainapp

  

//

  

#include

  

#include "MainGUI.h"

  

#include "MailFox.h"

  

  

IMPLEMENT_APP(MailFox)

  

  

bool MailFox::OnInit()

  

{

  

MainGUI *pGUI = new MainGUI("MailFox邮件程序",0,0,640,480);

  

pGUI->Show(true);

  

SetTopWindow(pGUI);

  

return true;

  

}

  

  

  

--------------------

  

偶还是愿意看提问时写清楚问题与标题的贴子:D

  

IP: [ ---------- ]

  

无双

  

发帖时间 2004-04-01 21:32:43

  

  

  

天才猪

  

  

  

组别: 治理员

  

金钱: 3555 两

  

帖子数量: 1036

  

精华帖数: 47

  

注册时间: 2003-09-16

  

  

  

  

  

现在到主界面窗口了

  

主界面窗口从wxFrame派生 在构造函数中进行界面的初始化 (等下会看到 )

  

使用DECLARE_EVENT_TABLE声明要使用事件处理宏 等下也会看到

  

当然可以不使用事件处理宏 可以查找我发的前一个例子

  

  

wxwindows中使用的控件,在程序退出时会自动清除 所以在析构中不必使用free

  

  

代码

  

  

#ifndef MAINGUI_H_

  

#define MAINGUI_H_

  

  

// toolbar and menubar commands

  

enum {

  

IDC_QUIT = 1,

  

IDC_ABOUT

  

};

  

  

class MainGUI:public wxFrame{

  

wxMenuBar *menuBar;

  

wxMenu *menuFile;

  

  

void OnAbout(wxCommandEvent &event);

  

void OnExit (wxCommandEvent &event);

  

public:

  

MainGUI(const wxChar *Title,int XPos,int ypos,int width,int height);

  

~MainGUI();

  

  

DECLARE_EVENT_TABLE();

  

};

  

  

#endif

  

  

  

--------------------

  

偶还是愿意看提问时写清楚问题与标题的贴子:D

  

IP: [ ---------- ]

  

无双

  

发帖时间 2004-04-01 21:36:38

  

  

  

天才猪

  

  

  

组别: 治理员

  

金钱: 3555 两

  

帖子数量: 1036

  

精华帖数: 47

  

注册时间: 2003-09-16

  

  

  

  

  

界面的实现

  

添加控件在构造函数中进行

  

注重构造函数中对父类进行了初始化wxFrame((wxFrame*)NULL,-1,Title,wxPoint(xpos,ypos),wxSize(width,height)

  

  

事件的定义 声明用哪个函数处理哪个事件

  

  

BEGIN_EVENT_TABLE(MainGUI,wxFrame)

  

EVT_MENU(IDC_ABOUT,MainGUI::OnAbout)

  

EVT_MENU(IDC_QUIT,MainGUI::OnExit)

  

END_EVENT_TABLE()

  

  

  

这个界面只是添加了一个菜单 然后还有一个状态栏

  

没有其它控件

  

  

另外 把这个文件保存成MainGUI.cpp

  

上面对应的头文件为MainGUI.h

  

  

上面的应用程序的类文件名分别为

  

MailFox.cpp MailFox.h

  

  

保存好 编译并执行就可以看到了

  

  

  

代码

  

  

#include

  

#include "MainGUI.h"

  

  

  

  

MainGUI::MainGUI(const wxChar *Title,int xpos,int ypos,int width,int height)

  

:wxFrame((wxFrame*)NULL,-1,Title,wxPoint(xpos,ypos),wxSize(width,height))

  

{

  

// create menubar and menu

  

menuBar = new wxMenuBar;

  

if( menuBar )

  

menuFile = new wxMenu;

  

else

  

  

menuFile = NULL;

  

  

if(!menuFile){

  

delete menuBar;

  

return;

  

}

  

  

menuFile->Append(IDC_ABOUT,"关于");

  

menuFile->Append(IDC_QUIT,"退出");

  

menuBar->Append(menuFile,"文件");

  

SetMenuBar(menuBar);

  

CreateStatusBar(3);

  

SetStatusText("欢迎使用MailFox邮件软件");

  

}

  

  

  

MainGUI::~MainGUI()

  

{

  

}

  

  

BEGIN_EVENT_TABLE(MainGUI,wxFrame)

  

EVT_MENU(IDC_ABOUT,MainGUI::OnAbout)

  

EVT_MENU(IDC_QUIT,MainGUI::OnExit)

  

END_EVENT_TABLE()

  

  

void MainGUI::OnAbout(wxCommandEvent& event)

  

{

  

wxMessageDialog aboutDialog(this,"MailFox邮件软件,新的邮件客户端",

  

"关于",wxOK);

  

aboutDialog.ShowModal();

  

}

  

  

void MainGUI::OnExit(wxCommandEvent &event)

  

{

  

Close(true);

  

}

  

  

__________________

  

http://mushuang.forumer.com

  

http://loveunix.onlinecq.com

  

  

[IMG]http://www.loveunix.net/style_images/1/logo2.gif[/IMG]

  

欢迎参观我的论坛

  

精彩图集

赞助商链接