周淑華
摘 要:文章針對(duì)模擬訓(xùn)練軟件開發(fā)中需要用到的嵌入式操作系統(tǒng)的控件進(jìn)行了研究,并在C#環(huán)境下對(duì)常用操作系統(tǒng)控件的設(shè)計(jì)進(jìn)行了研究,提出設(shè)計(jì)的思路并進(jìn)行了實(shí)現(xiàn)。研究結(jié)果表明,此種設(shè)計(jì)方法能夠解決在windows環(huán)境下模擬嵌入式操作系統(tǒng)操作界面的問題,對(duì)于研發(fā)裝備操作類的模擬訓(xùn)練軟件具有一定的參考意義。
關(guān)鍵詞:控件;操作系統(tǒng);
為了便于用戶對(duì)裝備的參數(shù)進(jìn)行配置,在很多裝備研制的過程中都會(huì)采用嵌入式操作系統(tǒng),比如VxWorks WinCE等。嵌入式操作系統(tǒng)因其運(yùn)行速度快,占用內(nèi)存小等優(yōu)勢(shì),得到了廣泛的應(yīng)用。而在很多模擬訓(xùn)練軟件開發(fā)的過程中,需要在Windows環(huán)境下,對(duì)裝備的參數(shù)配置界面進(jìn)行模擬,也即模擬出類似嵌入式操作系統(tǒng)的操作界面,便于用戶對(duì)裝備操作進(jìn)行模擬訓(xùn)練。因此,怎樣在Windows環(huán)境下設(shè)計(jì)出一個(gè)類似嵌入式操作系統(tǒng)的“類嵌入式操作系統(tǒng)”,能夠完成嵌入式操作系統(tǒng)的一些功能,滿足模擬訓(xùn)練軟件開發(fā)的特定需求,也就變得有一定意義。本文正是基于此,提出了一種基于C#環(huán)境下的“類嵌入式操作系統(tǒng)”設(shè)計(jì)方法,并在工程實(shí)踐中得到了應(yīng)用,應(yīng)用結(jié)果表明,該方法正確可行,具有一定推廣應(yīng)用價(jià)值。
1.“類嵌入式操作系統(tǒng)”設(shè)計(jì)需要解決的關(guān)鍵問題
“類嵌入式操作系統(tǒng)”設(shè)計(jì)需要解決的關(guān)鍵問題主要包括三個(gè)方面:一是操作系統(tǒng)底層算法設(shè)計(jì);二是操作系統(tǒng)界面控件設(shè)計(jì);三是操作系統(tǒng)界面控件所承載的參數(shù)之間約束關(guān)系的設(shè)計(jì)。對(duì)于第一個(gè)問題來說,Windows操作系統(tǒng)本身的擁有非常強(qiáng)大的功能,因此,底層算法完全可以由Windows來解決,用戶無需再加考慮;對(duì)于第三個(gè)問題,需要根據(jù)具體裝備參數(shù)之間的約束關(guān)系來定,需要具體問題具體對(duì)待,無法統(tǒng)一設(shè)計(jì);對(duì)于第二個(gè)問題,Windows本身也提供了一些標(biāo)準(zhǔn)的控件,比如文本框控件、下拉列表控件等,但是,這些控件和嵌入式操作系統(tǒng)的控件無論在外觀方面還是在控制方式方面都有差別。比如,在控件的控制方式方面,Windows一般采用鼠標(biāo)操作控件,而嵌入式操作系統(tǒng)很少用鼠標(biāo)操作,多用鍵盤對(duì)控件進(jìn)行操作。因此,需要對(duì)操作系統(tǒng)的界面控件進(jìn)行重新設(shè)計(jì),使之符合嵌入式操作系統(tǒng)的操作需求,所以,操作系統(tǒng)界面控件設(shè)計(jì)問題是“類嵌入式操作系統(tǒng)”設(shè)計(jì)的重點(diǎn),也是難點(diǎn),本文主要針對(duì)此問題進(jìn)行研究,對(duì)嵌入式操作系統(tǒng)中的文本輸入控件、組合框控件、列表顯示控件、對(duì)話框控件和單選按鈕控件等五種主要控件進(jìn)行設(shè)計(jì)。
2.“類嵌入式操作系統(tǒng)”控件設(shè)計(jì)與使用
(1)文本輸入控件
文本輸入框控件(INPUTBOX)是嵌入式操作系統(tǒng)最常用的控件之一,它是實(shí)現(xiàn)用戶文本輸入和參數(shù)顯示的接口,它以Windows標(biāo)準(zhǔn)控件Label控件為基類進(jìn)行設(shè)計(jì)。類屬性除了包含Label控件的所有屬性之外,還包括控件被輸入次數(shù)屬性(iCount)和控件是否為焦點(diǎn)控件屬性(bFocus),類成員函數(shù)除了包含Label控件的的所有成員函數(shù)之外,還包括使控件成為焦點(diǎn)控件函數(shù)(SetFocus())、使控件退出焦點(diǎn)函數(shù)(OutFocus())、控件參數(shù)輸入函數(shù)(input(string key)),可以實(shí)現(xiàn)字符的輸入、刪除以及焦點(diǎn)的切換操作。INPUTBOX控件主要代碼設(shè)計(jì)如下:
public class INPUTBOX : Label//參數(shù)輸入控件定義
{
public INPUTBOX(Form fm) //參數(shù)初始化
private int iCount;//標(biāo)識(shí)控件被輸入次數(shù)
private bool bFocus;//標(biāo)識(shí)控件是否是焦點(diǎn)
public void SetFocus()//設(shè)置控件為焦點(diǎn)
public void OutFocus()//使控件退出焦點(diǎn)
public void input(string key)//控件參數(shù)輸入函數(shù)
}
(2)組合框控件
組合框控件(CMBOX)是用于對(duì)參數(shù)進(jìn)行選擇的控件,它可以在“上鍵”和“下鍵”的控制下,顯示預(yù)先設(shè)置的參數(shù),供用戶進(jìn)行選擇。它以Windows標(biāo)準(zhǔn)控件Label控件為基類進(jìn)行設(shè)計(jì)。類屬性除了包含Label控件的所有屬性之外,還包括控件參數(shù)選項(xiàng)總個(gè)數(shù)(nCount)、當(dāng)前參數(shù)值索引(index)、參數(shù)存儲(chǔ)寄存器(par)、參數(shù)值序列(parstr)、控件成為焦點(diǎn)標(biāo)志(bFocus)和控件是否可用標(biāo)志(bDisabled),類成員函數(shù)除了包含Label控件的的所有成員函數(shù)之外,還包括獲取參數(shù)選項(xiàng)總個(gè)數(shù)函數(shù)(getnum(string str))、填充參數(shù)存儲(chǔ)寄存器函數(shù)(FillPar(string str))、使控件成為焦點(diǎn)函數(shù)(SetFocus())、使控件退出焦點(diǎn)函數(shù)(OutFocus())、使控件不可用函數(shù)(Disable())、按鍵輸入函數(shù)(input(string str))、顯示指定參數(shù)值函數(shù)(Show(string str))和顯示指定位置參數(shù)函數(shù)(Show(int j))。CMBOX控件主要代碼設(shè)計(jì)如下:
public class CMBOX : Label//組合框控件
{
public CMBOX(Form fm) //參數(shù)初始化
public int nCount;//參數(shù)值選項(xiàng)總個(gè)數(shù)
public int index;//當(dāng)前參數(shù)值索引
public string[] par;//參數(shù)存儲(chǔ)寄存器
private string parstr;//參數(shù)值序列
private bool bFocus;// 控件成為焦點(diǎn)標(biāo)志
private bool bDisabled;//控件是否可用標(biāo)志
private int getnum(string str)// 獲取參數(shù)選項(xiàng)總個(gè)數(shù)函數(shù),根據(jù)指定字符串獲取參數(shù)個(gè)數(shù)
private void FillPar(string str)//填充參數(shù)存儲(chǔ)寄存器函數(shù),將字符串所代表的參數(shù)填寫到數(shù)組par[]中
public string strPar//參數(shù)字符串屬性,不可讀,只可寫
public void SetFocus()//使控件成為焦點(diǎn)函數(shù)
public void OutFocus()//使控件退出焦點(diǎn)
public void Disable()//使控件不可用函數(shù),控件變灰,不可用
public void input(string str)//按鍵輸入函數(shù),對(duì)“上鍵”、“下鍵”、“左鍵”和“右鍵”進(jìn)行響應(yīng)
public void Show(string str)//顯示指定參數(shù)值,顯示指定的參數(shù)值str
public void Show(int j)//顯示指定位置參數(shù)值,顯示指定位置為j的參數(shù)值
}
(3)列表顯示控件
列表顯示框控件(LISTVIEWBOX)是采用列表的方式對(duì)參數(shù)進(jìn)行分行顯示的控件,類屬性主要包括列表顯示子控件(lb)、焦點(diǎn)行控件索引(index)、焦點(diǎn)標(biāo)志(bFocus)、控件列數(shù)(COLLUM)和控件行數(shù)(ROW),類成員函數(shù)主要包括顯示控件函數(shù)(Location())、隱藏控件函數(shù)(hide())、使控件某行成為焦點(diǎn)函數(shù)(SetFocus(int i))、使控件某行退出焦點(diǎn)函數(shù)(OutFocus(int i))、使列表顯示控件成為焦點(diǎn)函數(shù)(SetFocus())、使列表顯示控件退出焦點(diǎn)函數(shù)(OutFocus())、按鍵響應(yīng)函數(shù)(input(string str))、獲取控件參數(shù)值函數(shù)(GetValue())、修改控件參數(shù)值函數(shù)(SetValue(string[] str))、增加控件列表項(xiàng)函數(shù)(Increase(string[] str))、減少控件列表項(xiàng)函數(shù)(Decrease())和前置顯示函數(shù)(BringToFront())。能夠?qū)崿F(xiàn)以列表的方式進(jìn)行顯示參數(shù)、增加參數(shù)、刪除參數(shù)、修改參數(shù)等功能。LISTVIEWBOX控件主要代碼設(shè)計(jì)如下:
public class LISTVIEWBOX//列表顯示控件定義
{
public LISTVIEWBOX(Form fm, string[,] par) //初始化參數(shù)
public Label[] lb;// 列表顯示子控件
public int index;//焦點(diǎn)的控件索引
public bool bFocus;//標(biāo)識(shí)該控件是否為焦點(diǎn)控件
public int COLLUM;//控件列數(shù)
public int ROW;//控件行數(shù)
public void Location(Point pt, int[] width, int height = 14, int distance = 2)//顯示控件函數(shù),pt表示控件左上角的位置,row表示控件有幾行,collum表示控件有幾列,width[]表示每個(gè)控件的寬度,height表示控件之間的上下距離,distance表示控件左右的距離
public void hide()//隱藏控件函數(shù)
public void SetFocus(int i)//使控件第i行成為焦點(diǎn)函數(shù)
public void OutFocus(int i)//使控件第i行退出焦點(diǎn)函數(shù)
public void SetFocus()//使列表顯示控件成為焦點(diǎn)函數(shù)
public void OutFocus()//使列表顯示控件退出焦點(diǎn)函數(shù)
public void input(string str)//按鍵輸入函數(shù),對(duì)“上鍵”和“下鍵”進(jìn)行響應(yīng)
public string[] GetValue()//獲取控件參數(shù)值函數(shù)函數(shù),獲取當(dāng)前成為焦點(diǎn)的控件參數(shù)值
public void SetValue(string[] str)//修改控件參數(shù)值函數(shù),修改當(dāng)前成為焦點(diǎn)的控件參數(shù)值
public void Increase(string[] str)//增加列表項(xiàng)函數(shù),將str增加到當(dāng)前控件參數(shù)表中
public void Decrease()//減少列表項(xiàng)函數(shù),刪除最后一項(xiàng)列表項(xiàng)
public void BringToFront()//前置顯示函數(shù),將控件在界面最頂層顯示
(4)對(duì)話框控件
對(duì)話框控件(MessageTIP)用于彈出提示信息,類屬性主要包括:彈出對(duì)話框的背景(pbox)、對(duì)話框的類型(tpType)、對(duì)話框的標(biāo)題(title)、提示消息的內(nèi)容(tip)、確認(rèn)鍵(OK)、取消鍵(CANCEL)、選項(xiàng)標(biāo)志(bOption)和顯示標(biāo)志(bShow)。類成員函數(shù)主要包括:初始化函數(shù)(MessageTIP(Form fm, int type))、彈出對(duì)話框函數(shù)(ShowIip(string strTitle, string strTip))、隱藏對(duì)話框函數(shù)(hideBox())、置頂顯示函數(shù)(TopShow())和按鍵響應(yīng)函數(shù)(input(string key)),能夠?qū)崿F(xiàn)對(duì)話框的彈出、消息顯示、按鈕選擇等功能。MessageTIP類主要代碼設(shè)計(jì)如下:
public class MessageTIP
{
private PictureBox pbox;//彈出對(duì)話框背景
private int tpType;//對(duì)話框的類型0,標(biāo)識(shí)YN,1標(biāo)識(shí)YY
private Label title;//對(duì)話框標(biāo)題
private Label tip;//提示消息的內(nèi)容
private Label OK;//確認(rèn)按鍵
private Label CANCEL;//取消按鍵
private bool bOption;//選項(xiàng)標(biāo)志,0標(biāo)識(shí)選擇確認(rèn),1標(biāo)識(shí)選擇取消
private bool bShow;//標(biāo)識(shí)控件是否顯示
public MessageTIP(Form fm, int type)//初始化參數(shù)函數(shù),根據(jù)對(duì)話框類型type確定顯示背景及顯示內(nèi)容
public void ShowIip(string strTitle, string strTip) //彈出對(duì)話框函數(shù),顯示對(duì)話框背景、標(biāo)題strTitle及內(nèi)容strTip
public void hideBox()//隱藏對(duì)話框
public void TopShow()//置頂顯示對(duì)話框,將對(duì)話框在界面最前端顯示
public int input(string key)//按鍵響應(yīng)函數(shù),對(duì)“左鍵”、“右鍵”、“確認(rèn)鍵”進(jìn)行響應(yīng)
}
(5)單選按鈕控件
單選按鈕控件(RadioBtnBox)在界面上顯示多個(gè)圓點(diǎn)代表的按鈕,只能選擇一個(gè),選項(xiàng)之間互斥,類屬性主要包括:控件圖標(biāo)(pbox)、控件顯示標(biāo)志(Visible)和控件位置(Loaction)。類成員函數(shù)主要包括:初始化函數(shù)(RadioBtnBox (Form fm, Point pt))、置頂顯示函數(shù)(BringToFront())、使控件成為焦點(diǎn)函數(shù)(SetFocus())和使控件退出焦點(diǎn)函數(shù)(OutFocus())。
public class RadioBtnBox
{
public RadioBtnBox (Form fm, Point pt)//初始化參數(shù)
private PictureBox pbox;//控件圖標(biāo)
public bool Visible//控件顯示標(biāo)志
public Point Loaction//控件位置
public void BringToFront()//置頂顯示函數(shù)
public void SetFocus()//使控件成為焦點(diǎn)函數(shù)
public void OutFocus()//使控件退出焦點(diǎn)函數(shù)
}