基于C#环境下的“类嵌入式操作系统”设计与实现
2018-05-26周淑华
周淑华
摘 要:文章针对模拟训练软件开发中需要用到的嵌入式操作系统的控件进行了研究,并在C#环境下对常用操作系统控件的设计进行了研究,提出设计的思路并进行了实现。研究结果表明,此种设计方法能够解决在windows环境下模拟嵌入式操作系统操作界面的问题,对于研发装备操作类的模拟训练软件具有一定的参考意义。
关键词:控件;操作系统;
为了便于用户对装备的参数进行配置,在很多装备研制的过程中都会采用嵌入式操作系统,比如VxWorks WinCE等。嵌入式操作系统因其运行速度快,占用内存小等优势,得到了广泛的应用。而在很多模拟训练软件开发的过程中,需要在Windows环境下,对装备的参数配置界面进行模拟,也即模拟出类似嵌入式操作系统的操作界面,便于用户对装备操作进行模拟训练。因此,怎样在Windows环境下设计出一个类似嵌入式操作系统的“类嵌入式操作系统”,能够完成嵌入式操作系統的一些功能,满足模拟训练软件开发的特定需求,也就变得有一定意义。本文正是基于此,提出了一种基于C#环境下的“类嵌入式操作系统”设计方法,并在工程实践中得到了应用,应用结果表明,该方法正确可行,具有一定推广应用价值。
1.“类嵌入式操作系统”设计需要解决的关键问题
“类嵌入式操作系统”设计需要解决的关键问题主要包括三个方面:一是操作系统底层算法设计;二是操作系统界面控件设计;三是操作系统界面控件所承载的参数之间约束关系的设计。对于第一个问题来说,Windows操作系统本身的拥有非常强大的功能,因此,底层算法完全可以由Windows来解决,用户无需再加考虑;对于第三个问题,需要根据具体装备参数之间的约束关系来定,需要具体问题具体对待,无法统一设计;对于第二个问题,Windows本身也提供了一些标准的控件,比如文本框控件、下拉列表控件等,但是,这些控件和嵌入式操作系统的控件无论在外观方面还是在控制方式方面都有差别。比如,在控件的控制方式方面,Windows一般采用鼠标操作控件,而嵌入式操作系统很少用鼠标操作,多用键盘对控件进行操作。因此,需要对操作系统的界面控件进行重新设计,使之符合嵌入式操作系统的操作需求,所以,操作系统界面控件设计问题是“类嵌入式操作系统”设计的重点,也是难点,本文主要针对此问题进行研究,对嵌入式操作系统中的文本输入控件、组合框控件、列表显示控件、对话框控件和单选按钮控件等五种主要控件进行设计。
2.“类嵌入式操作系统”控件设计与使用
(1)文本输入控件
文本输入框控件(INPUTBOX)是嵌入式操作系统最常用的控件之一,它是实现用户文本输入和参数显示的接口,它以Windows标准控件Label控件为基类进行设计。类属性除了包含Label控件的所有属性之外,还包括控件被输入次数属性(iCount)和控件是否为焦点控件属性(bFocus),类成员函数除了包含Label控件的的所有成员函数之外,还包括使控件成为焦点控件函数(SetFocus())、使控件退出焦点函数(OutFocus())、控件参数输入函数(input(string key)),可以实现字符的输入、删除以及焦点的切换操作。INPUTBOX控件主要代码设计如下:
public class INPUTBOX : Label//参数输入控件定义
{
public INPUTBOX(Form fm) //参数初始化
private int iCount;//标识控件被输入次数
private bool bFocus;//标识控件是否是焦点
public void SetFocus()//设置控件为焦点
public void OutFocus()//使控件退出焦点
public void input(string key)//控件参数输入函数
}
(2)组合框控件
组合框控件(CMBOX)是用于对参数进行选择的控件,它可以在“上键”和“下键”的控制下,显示预先设置的参数,供用户进行选择。它以Windows标准控件Label控件为基类进行设计。类属性除了包含Label控件的所有属性之外,还包括控件参数选项总个数(nCount)、当前参数值索引(index)、参数存储寄存器(par)、参数值序列(parstr)、控件成为焦点标志(bFocus)和控件是否可用标志(bDisabled),类成员函数除了包含Label控件的的所有成员函数之外,还包括获取参数选项总个数函数(getnum(string str))、填充参数存储寄存器函数(FillPar(string str))、使控件成为焦点函数(SetFocus())、使控件退出焦点函数(OutFocus())、使控件不可用函数(Disable())、按键输入函数(input(string str))、显示指定参数值函数(Show(string str))和显示指定位置参数函数(Show(int j))。CMBOX控件主要代码设计如下:
public class CMBOX : Label//组合框控件
{
public CMBOX(Form fm) //参数初始化
public int nCount;//参数值选项总个数
public int index;//当前参数值索引
public string[] par;//参数存储寄存器
private string parstr;//参数值序列
private bool bFocus;// 控件成为焦点标志
private bool bDisabled;//控件是否可用标志
private int getnum(string str)// 获取参数选项总个数函数,根据指定字符串获取参数个数
private void FillPar(string str)//填充参数存储寄存器函数,将字符串所代表的参数填写到数组par[]中
public string strPar//参数字符串属性,不可读,只可写
public void SetFocus()//使控件成为焦点函数
public void OutFocus()//使控件退出焦点
public void Disable()//使控件不可用函数,控件变灰,不可用
public void input(string str)//按键输入函数,对“上键”、“下键”、“左键”和“右键”进行响应
public void Show(string str)//顯示指定参数值,显示指定的参数值str
public void Show(int j)//显示指定位置参数值,显示指定位置为j的参数值
}
(3)列表显示控件
列表显示框控件(LISTVIEWBOX)是采用列表的方式对参数进行分行显示的控件,类属性主要包括列表显示子控件(lb)、焦点行控件索引(index)、焦点标志(bFocus)、控件列数(COLLUM)和控件行数(ROW),类成员函数主要包括显示控件函数(Location())、隐藏控件函数(hide())、使控件某行成为焦点函数(SetFocus(int i))、使控件某行退出焦点函数(OutFocus(int i))、使列表显示控件成为焦点函数(SetFocus())、使列表显示控件退出焦点函数(OutFocus())、按键响应函数(input(string str))、获取控件参数值函数(GetValue())、修改控件参数值函数(SetValue(string[] str))、增加控件列表项函数(Increase(string[] str))、减少控件列表项函数(Decrease())和前置显示函数(BringToFront())。能够实现以列表的方式进行显示参数、增加参数、删除参数、修改参数等功能。LISTVIEWBOX控件主要代码设计如下:
public class LISTVIEWBOX//列表显示控件定义
{
public LISTVIEWBOX(Form fm, string[,] par) //初始化参数
public Label[] lb;// 列表显示子控件
public int index;//焦点的控件索引
public bool bFocus;//标识该控件是否为焦点控件
public int COLLUM;//控件列数
public int ROW;//控件行数
public void Location(Point pt, int[] width, int height = 14, int distance = 2)//显示控件函数,pt表示控件左上角的位置,row表示控件有几行,collum表示控件有几列,width[]表示每个控件的宽度,height表示控件之间的上下距离,distance表示控件左右的距离
public void hide()//隐藏控件函数
public void SetFocus(int i)//使控件第i行成为焦点函数
public void OutFocus(int i)//使控件第i行退出焦点函数
public void SetFocus()//使列表显示控件成为焦点函数
public void OutFocus()//使列表显示控件退出焦点函数
public void input(string str)//按键输入函数,对“上键”和“下键”进行响应
public string[] GetValue()//获取控件参数值函数函数,获取当前成为焦点的控件参数值
public void SetValue(string[] str)//修改控件参数值函数,修改当前成为焦点的控件参数值
public void Increase(string[] str)//增加列表项函数,将str增加到当前控件参数表中
public void Decrease()//减少列表项函数,删除最后一项列表项
public void BringToFront()//前置显示函数,将控件在界面最顶层显示
(4)对话框控件
对话框控件(MessageTIP)用于弹出提示信息,类属性主要包括:弹出对话框的背景(pbox)、对话框的类型(tpType)、对话框的标题(title)、提示消息的内容(tip)、确认键(OK)、取消键(CANCEL)、选项标志(bOption)和显示标志(bShow)。类成员函数主要包括:初始化函数(MessageTIP(Form fm, int type))、弹出对话框函数(ShowIip(string strTitle, string strTip))、隐藏对话框函数(hideBox())、置顶显示函数(TopShow())和按键响应函数(input(string key)),能够实现对话框的弹出、消息显示、按钮选择等功能。MessageTIP类主要代码设计如下:
public class MessageTIP
{
private PictureBox pbox;//弹出对话框背景
private int tpType;//对话框的类型0,标识YN,1标识YY
private Label title;//对话框标题
private Label tip;//提示消息的内容
private Label OK;//确认按键
private Label CANCEL;//取消按鍵
private bool bOption;//选项标志,0标识选择确认,1标识选择取消
private bool bShow;//标识控件是否显示
public MessageTIP(Form fm, int type)//初始化参数函数,根据对话框类型type确定显示背景及显示内容
public void ShowIip(string strTitle, string strTip) //弹出对话框函数,显示对话框背景、标题strTitle及内容strTip
public void hideBox()//隐藏对话框
public void TopShow()//置顶显示对话框,将对话框在界面最前端显示
public int input(string key)//按键响应函数,对“左键”、“右键”、“确认键”进行响应
}
(5)单选按钮控件
单选按钮控件(RadioBtnBox)在界面上显示多个圆点代表的按钮,只能选择一个,选项之间互斥,类属性主要包括:控件图标(pbox)、控件显示标志(Visible)和控件位置(Loaction)。类成员函数主要包括:初始化函数(RadioBtnBox (Form fm, Point pt))、置顶显示函数(BringToFront())、使控件成为焦点函数(SetFocus())和使控件退出焦点函数(OutFocus())。
public class RadioBtnBox
{
public RadioBtnBox (Form fm, Point pt)//初始化参数
private PictureBox pbox;//控件图标
public bool Visible//控件显示标志
public Point Loaction//控件位置
public void BringToFront()//置顶显示函数
public void SetFocus()//使控件成为焦点函数
public void OutFocus()//使控件退出焦点函数
}