TAG:
您所在的位置: 会计论文网 >> 会计电算化论文 >> 会计电算化论文范文 >> wxWidgets 在电力系统图形软件开

wxWidgets 在电力系统图形软件开发中的应用研究

来源:   www.zhaopaper.com

  摘 要:本文论述了目前电力系统图形软件所存在的几个问题,并针对这些问题,分析了wxWidgets 的跨平台、本地观感、面向对象等特性,验证了基于wxWidgets 的开发能很好的弥补目前图形软件所存在的不足,为今后电力系统图形软件的开发提供了新的思路。
  
  关键词:电力系统;图形软件;wxWidgets
  
  
  1 引 言
  
  电力系统是一个复杂的系统,其拥有庞大的各类信息数据。如何在海量的数据中进行数据的选择、分析和结果显示,是电力系统各个专业在面临新技术的选择应用时所需要解决的关键问题。图形化技术将数据以更形象、更直观的形式表示出来,有利于人们洞察和分析数据之间的内在联系和数据的发展趋势、揭示数据内在规律,这一突出优势受到广大电力系统研究者的青睐,迅速成为了电力系统应用分析软件开发的热点。在电力系统图形软件得到大力发展的同时,各类问题也逐渐彰显。其中,普遍存在着像软件的移值性差、安全性差、面向过程的结构化程序设计、通用性差等大众问题。
  wxWidgets 是一个扩展了C++类层次结构的开发包,这个开发包用来开发用于桌面电脑或者移动设备的GUI(图形用户界面)应用程序。它的诸多特性(跨平台、本地观感、开源、面向对象编程等)给电力系统图形软件的开发带来了方便,并能够解决以上所述的一些普遍性问题,例如:跨平台等特性能够很好的解决电力系统图形软件移值性差这一问题;开源特性保证代码更加安全,生命力更加强劲;对C++类库封装这一特性可以让我们用面向对象的思想进行GUI 设计,应用类的层次关系,实现子类对父类的继承,并由子类进一步派生出子类,从而允许方便地加入新的对象进行扩充,以增大软件设计的灵活性,解决通用性差的问题。
  
  
  2 电力系统图形软件开发现状
  
  伴随着计算机图形软件的发展,电力系统图形软件经历了——利用预先绘制好的图形文件、通用的绘图软件(如AutoCAD)、专用图形开发软件(Visual C++)几个主要阶段。当前,几乎每个电力系统分析软件都有一个图形界面,但普遍还存在着以下几个问题:
  
  2.1 移植性差
  同一个程序,移值到不同平台(Windows、Linux 或者Mac OSX 等)上后,不能有效工作。要想在不同的平台实现同一功能,必须重新写针对这一平台的代码,并且还要重新学习那个平台的API(应用程序编程接口)。这样,不仅拘泥于不同平台的限制,还浪费大量的资源。
  
  2.2 安全性差
  有 Delphi 开发经验的学者可能有这样的体会,由于众所周知的原因,很多开发工具慢慢的被淘汰。相应的,应用其开发出来的软件也即成为历史。现在的很多开发工具通过收取软件授权费用盈利,即保护源代码,这样,很多情况下会有好奇的入侵现象。这就影响到使用这一工具来开发软件的安全性和生命力。
  
  2.3 面向过程的结构化程序设计方法
  使用结构化语言使编制中等复杂的程序变得较为容易。但是用了结构化程序语言,一旦项目达到一定规模,就会变得不可控制。其原因是项目的复杂性超出了程序员使用结构化程序设计技术所能管理的限度。
  
  2.4 通用性差
  目前大多数的图形界面都是为某一特定分析功能而定制的,如操作票系统、故障分析系统等等,主要表现在给出的设备参数单一。这样不得不为不同的分析功能做许多重复开发图形界面的工作。
  
  2.5 没有充分发挥Windows 环境下的图形用户界面的优势
  有些研究人员分别对不同的DOS 下的分析软件进行了优化,但它只是做到了可以在Windows 下进入系统,系统图表示通过调用位图来实现,而且各种数据的输入方法没有改变。
  
  
  3 wxWidgets 简介及优势
  
  3.1 wxWidgets 简介
  wxWidgets 是一个扩展了的C++类层次结构,具有跨平台性,本地观感,类库封装等特点。它提供了一个编程框架,作了很多底层的工作(像封装了SDK 结构、功能及应用程序框架内部技术),以便给应用程序及其控件提供默认的行为。wxWidgets 库给程序员提供了大量的类,这些类支持很多方法(C++中的关键词)以供其使用,程序员可以通过重载这些方法来实现定制的行为。
  一个典型 GUI 程序所作的事情包括:显示一个包含各种控件的窗口,在窗口中绘制特定的图形或者图像,响应来自鼠标,键盘以及其它输入设备的输入,和其它的进程通信,调用别的应用程序等,wxWidgets 所做的事情,就是让程序员可以通过更简单的手段来实现所有这些当代应用程序的通用特性。
  
  3.2 wxWidgets 优势
  WxWidgets 作为跨平台的GUI 软件开发包,从最初的只支持C++语言,逐渐发展成为支持数种语言(如Python、Perl、C、Basic 等)。现在的WxWidgets 已经不再是单纯的跨平台的GUI 软件开发包,而是一个可以支持多种操作系统平台的能够在多种语言中使用的通用跨平台软件开发包。它有以下一些优特点:
  
  3.2.1 跨平台
  wxWidgets 和其它类似的GUI 库(比如MFC 或者OWL)的最本质的区别莫过于:它是跨平台的。wxWidgets 提供的API函数在它支持的所有平台上都是相同或者至少是非常相近的。这意味着你可以通过它编写一个在Windows 上运行的程序,这个程序不需要经过任何改动(或者只需要很少的改动,这种情况并不常见),只需要通过重新编译,就可以在Linux 或者MacOSX 系统上运行,比起为另外的平台从头编写代码,这显然是很大的优势。另外一个附带的好处就是:你不需要重新学习那个平台的API(应用程序编程接口),而且你的程序可能在将来很长时间仍然不会过时,因为随着计算机科技的演进,wxWidgets 也将会进行相应的演进,这样你的程序将会很方便的移植到将来的最新的操作系统以支持最新的特性。
  为了描述这一点,一个名为StoryLines 的程序在Windows XP 平台上界面外观。
  很明显,这是一个典型的Windows 应用程序,有典型的Windows 的GUI 控件例如标签页,滚动条以及下拉列表。类似的,这个程序在Mac OSX 上的样子,正象我们期待的那样,它有着水晶外形图标,没有菜单条(因为按照苹果的风格,当前窗口的菜单条应该显示在屏幕的最顶层)。同样,这一程序在小红帽Linux 等系统上也能直接运用本地窗口控件来运行。
  
  3.2.2 本地观感
  wxWidgets 可以给你的应用程序提供和当前系统平台上其它应用程序非常相似的外观和操控手段。一些其它的可以跨平台的开发框架在不同的平台上使用同样的窗口组件代码,而通过类似窗口主题这样的方式来模拟本地观感。wxWidgets 则尽可能的使用本地的窗口控件(当然wxWidgets 也提供自己的控件集,这是另外一个话题了),所以wxWidgets 的程序不只是看上去象是当前系统上的原生程序,它实际上就是原生程序。对于使用这些应用程序的用户来说,本地观感是非常重要的,因为和本地操作系统界面标准的任何一点细微的甚至几乎是难以察觉的不同,都会让用户产生避而远之的想法。
  
  3.2.3 开源
  wxWidgets 是一个开放源代码的项目。毫无疑问,这意味着使用wxWidgets 是免费的,但是,开放源代码并不仅仅意味着免费,它有着更重要的意义。开源项目通常可以持续比它的创建团队或者通常意义上的拥有者更长久的时间。使用wxWidgets 开发程序,你的代码永远不会过时,你的代码所依赖的开发平台永远不会消失。你可以通过直接修改源代码来修正基础库中的问题,而不用担心你的开发工具被淘汰。
  
  3.2.4 面向对象编程
  和大多数现代的 GUI 编程框架一样,wxWidgets 大量使用了面向对象编程的概念。wxWidgets 所作的是:它已经实现了很多默认的行为,从而来让这个工作变的更容易。其每一个窗口都是一个C++的对象。这些对象已经被预置了很好的事件处理机制,可以接收事件并对事件作出相应的反应。而用户所看到的则是这个对象的交互系统中可视的那一部分。作为一个程序开发人员,你所要作的事情就是合理的安排这些可视的行为集来让它们作出的反应更符合你的程序的逻辑。
  
  3.2.5 各种跨平台开发包的比较
  目前支持跨平台的开发库很多,常见的比如wxWidgets、JAVA、QT、ACE 等。wxWidgets与JAVA 相比,一般来讲,基于C++的wxWidgets 程序会运行更快,感观上更象本地原生程序并且更容易安装,因为它并不依赖于你的机器一定要有JAVA 虚拟机。另外,wxWidgets使用C++语言,可以更容易的访问操作系统提供的底层函数,也可以更容易的和已有的C++或者C 代码集成,因此wxWidgets 可以开发高性能的,本地原生的应用程序,而这是JAVA所没有的。对于QT,它和wxWidgets 类似,但是QT 只在linux 下免费,而在Windows 或Unix 下使用QT 要支付版权费。而ACE 虽然是免费开源的,但是它没有提供GUI 功能。
  
  
  4 利用wxWidgets 解决电力系统图形软件若干问题
  
  wxWidgets 提供了用于可在多平台上开发GUI 应用程序的一整套简单易学易用的API。开发者只需要用自己使用的系统平台的编译器编译源程序,并链接上相应的库文件,生成的程序代码即具有该平台的外观和界面。wxWidgets 支持的Windows 上的多种流行编译器包括:Visual C++、Borland C++、Borland C++ Builder、Watcom C++ 10.6(Win32)、Cygwin、MinGW32、wxDevC++、visualWX、CodeBlocks 等,本文采用了Microsoft Visual C++ 2008进行了调试运行。
  
  4.1 对移植性差问题的解决并建立跨平台用户界面
  由以上所述的wxWidgets 的跨平台性和本地观感的特性,我们可以利用Microsoft VisualC++ 2008 写一个在Windows 上运行的程序。这个程序不需要经过任何改动,只需要通过其他平台的重新编译,就可以在Linux 或者Mac OSX 系统甚至移动设备上运行,并且运行结果具有该平台的典型特征,如标签页、滚动条、下拉列表等。下面以简单的菜单和工具界面开发为例,说明程序整体结构框架:
  
  4.1.1 main.h
  是一个继承自wxApp 的类,类中至少一个返回值为bool 的虚函数OnInit()作为程序的入口函数;若返回值为真,则wxWidgets 开始进入事件循环,接受输入事件并进行处理;若返回值为假,则释放已经分配的资源,结束程序的运行。
  
  class MyApp : public wxApp//应用程序类
  {
  public:
  virtual bool OnInit();//在应用程序启动时调用,如果返回false,退出应用程序
  };
  虚方法 OnInit 是应用程序的入口点,所以建立主窗体的工作要在这个函数中完成。
  
  4.1.2 menu.h
  一个继承自wxFrame 的类,此类负责整个窗口的布局。定义一些事件处理函数,以及对事件绑定的宏声明。
  
  class SimpleMenu : public wxFrame//窗体类
  {
  public:
  SimpleMenu(const wxString& title);//窗体的构造函数
  void OnQuit(wxcommandEvent& event) ;//声明事件函数
  wxMennuBar *menubar;
  wxMenu *file;
  };
  主窗体的构造函数实现。
  
  4.1.3 menu.cpp
  SimpleMenu 的构造函数通过它的基类wxFrame 的构造函数创建一个窗口,然后给这个窗口增加图标,菜单栏和状态栏。
  
  SimpleMenu::SimpleMenu(const wxString& title)
  : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))
  {
  menubar = new wxMenuBar;//创建菜单栏对象
  file = new wxMenu;//创建菜单对象file->Append(wxID_EXIT, wxT("&Quit"));//增加一个菜单到菜单对象
  menubar->Append(file, wxT("&File"));
  SetMenuBar(menubar) ;//增加菜单到菜单栏对象
  Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED,
  wxCommandEventHandler(SimpleMenu::OnQuit));
  Centre();
  }
  void SimpleMenu::OnQuit(wxCommandEvent& WXUNUSED(event))
  {
  Close(true);
  }
  
  4.1.4 main.cpp
  wxWidgets 为了调用OnInit 方法,提供了一个宏IMPLEMENT_APP(…),这个宏有一个参数,需要将MyApp 做为参数传入。即IMPLEMENT_APP(MyApp)。这个宏相当于一个WinMain 函数(和控制台程序的main 函数类似),即在WinMain 函数中调用了MyApp中的OnInit 函数。在加入这个宏后,就可使用一个C++编译器将以上的源程序编译生成exe 文件。
  
  IMPLEMENT_APP(MyApp)
  bool MyApp::OnInit()
  {
  SimpleMenu *menu = new SimpleMenu(wxT("Simple Menu"));
  menu->Show(true);//显示主窗体参数true 表示以模式窗口显示,否则以非模式的形式显示
  return true;//必须返回true,否则应用程序将退出
  }
  
  4.1.5 子菜单和工具栏的创建
  子菜单的创建类似于菜单的创建,它由AppendSubMenu()方法来实现:
  
  file-> AppendSubMenu();
  
  对于工具栏,可以通过以下方法创建工具栏和一个按钮,单击按钮,则调用一个函数方法(如Realize())来实现相应功能(如退出功能):
  wxToolBar toolbar = CreateToolBar();
  toolbar->AddTool(wxID_EXIT,exit,wxT(“Exit application”)) ;
  toolbar->Realize();
  综合运用以上的方法步骤,我们就可以建立一个可方便移值的、方便跨平台的应用程序的用户界面。
  
  4.2 对安全性差问题的解决
  wxWidgets 的开源特性可以相对的解决安全性差的问题。wxWidgets 是一个开源的项目,它吸引越来越多的程序爱好者加入到wxWidgets 的开发团队中来,在这样的一个开放和活跃的社区中,大家在为wxWidgets 更好的发展做着自己的努力,这就保证了wxWidgets 的强劲生命力来保持其向更完善的方向发展。如今,wxWidgets 已经被广泛的应用在各种工业领域。它的用户包含了象AOL、AMD、CALTECH、Lockheed Martin、NASA、the Open SourceApplications Foundation、Xerox 等一些大的商业和团体机构。wxWidgets 拥有很广泛的使用者,从个体的软件开发者到大的商业团体,从计算机科学领域到医疗研究领域,从社会生态学到电信领域。广泛的应用足以说明其可以很好的解决安全性的问题。
  
  4.3 对面向过程设计和通用性差问题的解决
  wxWidgets 大量使用了面向对象编程的概念,其每个窗口都是一个C++的对象。FoleyM首次采用面向对象的思想在Windows 环境下实现了一个适用于EMS (电网能量管理系统)软件的图形用户界面的设计,其按照电力系统的物理特点,建立了图形类的递阶层次关系。这个模型的最底层类就是最后要在屏幕上显示的对象,这些对象都是从电力系统的实际设备对象中抽象出来的,对实际问题表达得非常直观、自然,同时,根据类的层次关系,可实现子类对父类的继承,并由子类进一步派生出子类,从而允许方便地加入新的对象进行扩充,显示了采用面向对象思想进行GUI 设计的强大的灵活性。
  这样,在对电力系统图形系统的设计上,程序程序可由一个或多个类组成,它们用来描述一组具有共同特性的对象。对象是在系统中运行时刻的基本成分,是属性和行为的封装体。“对象”和“类”具有可继承性和多态性,它们给外界提供了统一的接口,而且一旦建立,就可重复使用。电力系统包含许多元件,这些不同种类的元件有相对独立的属性,而元件之间有相互关联的拓扑关系。由于各种元件具有一些相同的属性和方法,因此首先定义一个元件基本类作为所有元件的父类:
  classCDeviceElements :: publicCObject
  {
  public:
  char *m-Name;
  int m-Index;
  ……
  /*人机界面属性及方法*/
  virtualvoidDraw()
  ……
  /*与原件相关的其他属性及方法*/
  ……
  };
  
  其中,m-Name 为一指向字符串的指针,该字符串用于描述元件的名称,m-Index 为一整型变量,用于存储该元件在电网中的一个标识符,该标识符与数据库相关联,形成实例后,即可表示元件的唯一性又便于与数据库对应。各类元件均由该基类派生,实现图形的从抽象到具体,如母线类(CBus)、线路类(Cline)、负荷类(CLoad)、断路器类(CBreaker)、变压器类(CTransformer)以及发电机类(CGenerator)。
  我们在开发电力系统各种图形软件时,遇到相同或类似的图形情况,我们可以用之前开发好的类和方法,借助于wxWidgets 的跨平台等特性,直接移值到所用平台,而不用为相同的功能做大量的重复开发图形界面的工作。
  
  
  5 总 结
  
  电子计算机在电力系统分析中的应用越来越广泛,图形软件的发展给电力系统分析带来了方便。本文总结叙述了目前电力系统图形软件开发的几个典型问题;分析了wxWidgets这一GUI 软件开发包的特点;并且论证了,利用wxWidgets,可以很好地解决目前电力系统图形软件开发中所存在的问题,以促进图形软件更好的发展。

中国会计论文网提供会计电算化论文,如有业务需要请咨询本站客服人员!