简单的文本编辑器 - wxWindows编程事例

原创 2004年09月24日 09:58:00

        上一次简单介绍了一下wxWindows,那么今天就写个简单的程序,来体验一下wxWindows强大的功能。下面我们来创建一个简单的文本编辑器。你看了后会发现用wxWindows编写程序原来是这么的简单。废话少说,开始创建简单文本编辑器。

        创建自己的MainFrame

// 文件: MainFrm.h<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

#ifndef _MainFrm_H

#define _MainFrm_H

 

//通过继承wxFrame来创建你自己的Frame,这样你就可以向你自己的frame类中添加各种各样的功能

class MainFrm : public wxFrame

{

public:

 

    //构造函数. 用来创建新的MainFrm

 

       MainFrm(const wxChar *title, int xpos, int ypos, int width, int height);

 

    // 析构函数

 

       ~MainFrm();

 

       //处理菜单事件

      

    // Processes menu File|Open

       void OnMenuFileOpen(wxCommandEvent &event);

 

    // Processes menu File|Save

       void OnMenuFileSave(wxCommandEvent &event);

 

    // Processes menu File|Quit

       void OnMenuFileQuit(wxCommandEvent &event);

 

    // Processes menu About|Info

       void OnMenuInfoAbout(wxCommandEvent &event);

 

protected:

       //申明菜单处理事件表

       DECLARE_EVENT_TABLE();      

      

private:

       wxTextCtrl *m_pTextCtrl;

       wxMenuBar *m_pMenuBar;

       wxMenu *m_pFileMenu;

       wxMenu *m_pInfoMenu;

       enum

       {

              MENU_FILE_OPEN,

              MENU_FILE_SAVE,

              MENU_FILE_QUIT,

              MENU_INFO_ABOUT

       };   

};

#endif //_MainFrm_H

// 文件: MainFrm.cpp

// 对支持预编译编译器要包含"wx/wx.h"

#include "wx/wxprec.h"

#ifndef WX_PRECOMP

#include "wx/wx.h"

#endif

 

#include "MainFrm.h"

 

#include "wx/filedlg.h"

 

MainFrm::MainFrm(const wxChar *title, int xpos, int ypos, int width, int height)

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

/*

构造函数:

       wxFrame(wxWindow* parent,

       wxWindowId id,

       const wxString& title,

       const wxPoint& pos= wxDefaultPosition,

       const wxSize& size= wxDefaultSize,

       long style= wxDEFAULT_FRAME_STYLE,

       const wxString& name= "frame");

 

       parent: 是一个指向父窗口的指针,当框架没有父窗口时使用NULL

 

       id:     是唯一的窗口标识号,当你不需要它时使用-1.

      

       title:  是框架的标题,它将显示在框架的标题栏中。

        

       pos:    是框架的位置。WxDefaultPosition表示默认值。

             

       size:   是框架的大小。WxDefaultSize表示使用默认值。

               

       style:  是框架的风格。         

*/

{

       // 添加wxTexrCtrl控件来处理文本

       m_pTextCtrl = new wxTextCtrl(this, -1, wxString("Type your text..."),

              wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);

      

       //添加菜单栏

       m_pMenuBar = new wxMenuBar();

      // 添加 File Menu

      m_pFileMenu = new wxMenu();   

      m_pFileMenu->Append(MENU_FILE_OPEN, "打开(&O)","打开一个存在的文件");

      m_pFileMenu->Append(MENU_FILE_SAVE, "保存(&S)","保存一个文件");

      m_pFileMenu->AppendSeparator();

      m_pFileMenu->Append(MENU_FILE_QUIT, "退出(&Q)","退出程序");   

      m_pMenuBar->Append(m_pFileMenu, "文件(&F)");

      // 添加 About menu

      m_pInfoMenu = new wxMenu();

      m_pInfoMenu->Append(MENU_INFO_ABOUT, "关于 wxFrameTest","显示程序相关信息");

      m_pMenuBar->Append(m_pInfoMenu, "关于(&A)");

     SetMenuBar(m_pMenuBar);

      

       //添加状态栏

       CreateStatusBar(1);

       SetStatusText("Ready", 0);

}

 

MainFrm::~MainFrm()

{

}

 

//处理菜单事件

BEGIN_EVENT_TABLE(MainFrm, wxFrame)

EVT_MENU(MENU_FILE_OPEN, MainFrm::OnMenuFileOpen)

EVT_MENU(MENU_FILE_SAVE, MainFrm::OnMenuFileSave)

EVT_MENU(MENU_FILE_QUIT, MainFrm::OnMenuFileQuit)

EVT_MENU(MENU_INFO_ABOUT, MainFrm::OnMenuInfoAbout)

END_EVENT_TABLE()

 

void MainFrm::OnMenuFileOpen(wxCommandEvent &event)

{

       // 打开文件

       wxFileDialog *dlg = new wxFileDialog(this, "Open a text file", "", "",

              "All files(*.*)|*.*|Text Files(*.txt)|*.txt",

              wxOPEN, wxDefaultPosition);

       if(dlg->ShowModal()==wxID_OK)

       {

              m_pTextCtrl->LoadFile(dlg->GetPath());

              SetStatusText(dlg->GetFilename(),0);

       }

       dlg->Destroy();

      

}

void MainFrm::OnMenuFileSave(wxCommandEvent &event)

{

       // 保存文件

       wxFileDialog *dlg = new wxFileDialog(this, "Save a text file", "", "",

              "All files(*.*)|*.*|Text Files(*.txt)|*.txt",

              wxSAVE, wxDefaultPosition);

       if ( dlg->ShowModal() == wxID_OK )

       {

              m_pTextCtrl->SaveFile(dlg->GetPath());

              SetStatusText(dlg->GetFilename(), 0);

       }

       dlg->Destroy();

}

void MainFrm::OnMenuFileQuit(wxCommandEvent &event)

{

       //退出程序

       Close(FALSE);

}

void MainFrm::OnMenuInfoAbout(wxCommandEvent &event)

{

       wxLogMessage("CopyRight(c) 2004 . Donnie Zhang/n/n简单的文本编辑器 - wxFrame事例/n");

}

       显示自己创建的MainFrame

// 文件: wxFrameTest.h

#ifndef wxFrameTest_H

#define wxFrameTest_H

class wxFrameTestApp : public wxApp

{

public:

    // 程序初始化

    virtual bool OnInit();

};

DECLARE_APP(wxFrameTestApp)

#endif // wxFrameTest_H

// 文件: wxFrameTest.cpp

// 对支持预编译编译器要包含"wx/wx.h"

#include "wx/wxprec.h"

#ifndef WX_PRECOMP

#include "wx/wx.h"

#endif

#include "wxFrameTest.h"

#include "MainFrm.h"

 

IMPLEMENT_APP(wxFrameTestApp)

 

//每个wxWindow程序都要有一个继承自wxApp的对象,并都要用OnInit()方法来实例化,

//而你就是在这创建主窗口。

 

bool wxFrameTestApp::OnInit()

{

    MainFrm *frame = new MainFrm("简单的文本编辑器 - wxFrame事例", 100, 100, 800, 600);

       frame->SetIcon(wxICON(MainFrmICON));

    frame->Show(TRUE);

    SetTopWindow(frame);

    return true;

}


       这样一个简单的编辑器就写完了,用不着我多做解释,看代码注释应该就可以懂了。其中就是菜单响应事件这块有些需要注意。它用的是事件表(在wxWindows的早期版本中这是通过使用回调函数或者通过重载虚拟函数来实现的,wxWindows2.0后改为使用事件表来实现。)。要处理事件的每个类都需要声明一个事件表。MainFrm.h代码中宏DECLARE_EVENT_TABLE用来完成这项工作。每一个事件都必须有一个已经实现了的方法,每个方法都有一个参数用来包含事件的信息,从菜单获得的事件是一个wxCommandEvent类型的数据。而事件表我们放在实现文件中的,wxWindows通过一些宏来帮助的完成事件表的声明。宏BEGIN_EVENT在事件表声明的开始处使用,因为在一个程序中可能不止一个事件表,要将事件处理过程相关的类名传递给宏。将一个方法与事件关联要使用EVT_MENU宏。这个宏需要菜单ID与事件名。在事件表的最后用宏END_EVENT_TABLE作结束标记。这样我们就可以处理菜单事件了。
  
       

推荐15款很棒的文本编辑器——程序员专用

本文中提及的文本编辑器软件,并非全部开源,仅供参考。 1. Notepad++: 这是 Windows记事本一个最好的替换产品,主要特点包括: a. 自动完成 b. 语法高亮 c. 拖放...
  • woaixiaozhe
  • woaixiaozhe
  • 2012年08月07日 12:25
  • 8254

wxWindows

用C++编写跨平台程序中文版说明本教程由Gxl117翻译并将继续维护,这是本教程的第一稿,如果发现错误请与我(Email:gxl117@yahoo.com.cn)联系让我能及时修正它。之后还会对这个教...
  • bz201
  • bz201
  • 2005年11月11日 12:04
  • 2931

基于QT的简单文本编辑器

MainWindow.cpp#ifndef MAINWINDOW_H #define MAINWINDOW_H#include #includenamespace Ui { class Ma...
  • qq_27312943
  • qq_27312943
  • 2016年04月10日 19:05
  • 1231

简单的java文本编辑器源码

import javax.swing.*; import java.awt.*; import java.io.*; import java.awt.event.*; public class Tx...
  • lxx24915147
  • lxx24915147
  • 2015年01月21日 12:02
  • 1366

简单、易用、轻量的富文本编辑器

官网地址:http://www.wangeditor.com/index.html 好用的话记得点赞哦
  • justinytsoft
  • justinytsoft
  • 2016年09月29日 11:03
  • 4171

我做的一个java简单文本编辑器代码

下面是我的一个简单java程序代码,可以练习下。有的功能没弄完,有兴趣的可以完成他,对学java 很有帮助。package swing;import java.awt.*;import javax.s...
  • changtiger
  • changtiger
  • 2007年11月10日 16:15
  • 11207

wxwindows qt

转载:http://hi.baidu.com/%D2%BB%BD%A3%D5%B6%BA%EC%B3%BE/blog/item/7ff951941f24e20ed31b70da.html ...
  • zhangxinrun
  • zhangxinrun
  • 2012年04月26日 19:15
  • 963

java课程设计-文本编辑器

做这个文本编辑器的时候,分为几步来做; 第一步,先为文本编辑器搭好框架也就是布局。大小用灵活的能够跟着屏幕大小变动的设计,用Dimension dim=getToolkit().getscreense...
  • new___Smile
  • new___Smile
  • 2015年11月23日 12:23
  • 2708

一个简单的文本编辑器

package UserJFrame; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; im...
  • asd529735325
  • asd529735325
  • 2016年03月06日 20:06
  • 357

体验wxWindows安装

今天晚上把从wxWindows 上下载的wxWindows2.4.2安装好了,并且在VC6.0中成功的编译了几个wxWindows自带的例子.在这里把自己的一点体会和经验写下来,供后来者参考借鉴.wx...
  • huyoo
  • huyoo
  • 2005年03月25日 02:22
  • 6480
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单的文本编辑器 - wxWindows编程事例
举报原因:
原因补充:

(最多只允许输入30个字)