荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: DOS下的面向对象程序设计(2)
发信站: BBS 荔园晨风站 (Thu Jan 21 21:00:11 1999), 转信


  面对众多优秀的FOR WINDOWS的可视化编程软件的出现。人们越来越热衷于WINDOWS程序的
设计。因为编起来太方便了,在界面上所花的时间可大大减少。
  可是,许多时候我们不得不选择DOS,如实时工业监控软件。有的涉及大量运算的程序
(如高精度算法,矩阵运算等),在DOS下的速度实在要比WINDOWS下快。DOS程序的设计,
做过的人都知道,往往核心算法做得很快,而界面会花费你一大半的时间.
  可视化编程的基础是C++类概念的出现,因此在DOS下一样可实现可视化编程.发现现在
很多朋友在用C++编DOS程序时,只用类来封装数据,而不用类来封装代码.这是对类的浪费.
其实,要是你学会用类来封装代码,你就能创建自己的界面类库,从重复的界面设计工作中
解放出来.
  我用如下方法实现了DOS程序界面的类库(通过消息驱动):
  定义以下一个基类:
#define IsIdle         0 //空状态消息
#define MouseMove      1
#define LButtonDown    2
#define LButtonUp      3
#define RButtonDown    4
#define RButtonUp      5
#define LButtonDBClick 6
#define RButtonDBClick 7
#define KeyDown        8
#define KeyUp          9
#define Char           10
#define Timer          11
#define Quit           12
#define QueLength      20  //消息队列长度
typedef int Status;

class DOSGraApp
{
private:
  int  HighAdd,LowAdd; //鼠标事件处理程序的入口地址.
public:
  DOSGraApp();
  DOSGraApp(int Driver,int Mode);//Driver为显示驱动程序,Mode 为显示模式.
  ~DOSGrapp();
  void run();//消息控制函数,调用本函数程序开始运作

public:
  virtual void OnStart();//运行前初始化函数,可在此初始化你的变量
  virtual void OnIdle();
  virtual void OnLButtonDown(int x,int y,Status RButtonState);
  virtual void OnLButtonUp(int x,int y,Status RButtonState);
  virtual void OnRButtonDown(int x,int y,Status LButtonState);
  virtual void OnRButtonUp(int x,int y,Status LButtonState);
  virtual void OnMouseMove(int x,int y,Status ButtonState);
  virtual void OnLButtonDoubleClick(int x,int y,Status RButtonState);
  virtual void OnRButtonDoubleClick(int x,int y,Status RButtonState);
  virtual void OnKeyDown(char Key,int repeat,Status VKState);
  virtual void OnKeyUp(char Key,int repeat,Status VKState);
  virtual void OnChar(char key,int repeat,Status VKState);
  virtual void OnTimer(int Information1,int Information2,int Information3);
  virtual void OnQuit();
  virtual void OnOther(int event,int Information1,int Information2,int
                       Information3);
private:
  void InitMouseAndKeyboard();
  void CloseMouseAndKeyboard();
};
void   AddMessage(int Event,int i1=0,int i2=0,int i3=0);//往消息队列中加消息
void   PostQuitMessage();//发退出消息
struct MSG{
           int Event;
           int Information1;
           int Information2;
           int Information3;
          };//消息结构

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店