【 tulaoshi.com - 编程语言 】
                             
                              使用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 wx/wx.h
  #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 wx/wx.h
  #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]
  欢迎参观我的论坛