周淑華
摘 要:文章針對模擬訓練軟件開發中需要用到的嵌入式操作系統的控件進行了研究,并在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()//使控件退出焦點函數
}