使用wxdindows開發跨平臺的介面(轉)

post0發表於2007-08-11
使用wxdindows開發跨平臺的介面(轉)[@more@]

使用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);

}

__________________

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

歡迎參觀我的論

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-944748/,如需轉載,請註明出處,否則將追究法律責任。

相關文章