找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 6484|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

從零開始學(xué)VC系列教程 一.信息顯示實(shí)驗(yàn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:6404 發(fā)表于 2008-10-31 18:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
       題外話:第一次寫教程,不知道該怎么開始.以前見過的教程可能都會(huì)介紹比較多的理論然后才開始講實(shí)際操作,我想對(duì)于VC,理論講得太多大家可能更糊涂,所以選擇了這個(gè)方案,我們先一步步照著做,每一次只介紹一兩個(gè)知識(shí)點(diǎn),并且把理論放在后面說明,希望大家能喜歡這種方式,并對(duì)這種方式提出意見和建議,以便以后章節(jié)更適合大家的學(xué)習(xí).
或許我寫的還不能稱之為教程,只是一些操作步驟及說明,通過這些練習(xí),希望能使大家對(duì)VC有一個(gè)新的認(rèn)識(shí).VC的功能是十分強(qiáng)大的,但我們一般并不會(huì)用到所有的功能,就像大家熟悉的KeilC一樣,其實(shí)Keil功能也是很多的,平時(shí)也沒見誰(shuí)把Keil的功能都用到了.基于此,我寫的這個(gè)教程可能在VC專業(yè)人士看來比較簡(jiǎn)單.不是要班門弄斧,而是希望推行上位機(jī)技術(shù),形成一個(gè)氛圍讓大家來學(xué)習(xí)交流,PC機(jī)與下位機(jī)結(jié)合畢竟也是發(fā)展的一個(gè)方向.望高手諒解小輩的不自量力.同時(shí),我們結(jié)合單片機(jī)編程,讓大家明白上位機(jī)控制方法及原理,當(dāng)然這是今后章節(jié)的內(nèi)容了.
       本節(jié)內(nèi)容:學(xué)會(huì)在文本框中顯示文本,學(xué)會(huì)彈出式對(duì)話框使用.
       學(xué)習(xí)目的:信息顯示是人機(jī)交互的基礎(chǔ),同時(shí),信息顯示也為以后的程序調(diào)試打下基礎(chǔ).
1.       新建工程.打開VC6.0點(diǎn)擊[文件]->[新建],彈出如下對(duì)話框.
在工程選項(xiàng)中選擇MFC AppWizard[exe],選擇好工程存入的位置,然后在工程名稱中填入工程的名稱,例如Eg01,填入Eg01后.VC會(huì)在我們選擇的路徑后自動(dòng)加入一個(gè)以工程名命名的文件夾作為工程目錄.完成按[確定]就會(huì)進(jìn)入工程向?qū)?出現(xiàn)以下的提示.

在這個(gè)我們選擇[基于對(duì)話框]就行了.單文檔及多文檔方式會(huì)在以后詳細(xì)介紹.這里也簡(jiǎn)要說明一下.①單文檔.程序一次只能處理一個(gè)文檔對(duì)象(文件).像寫字板,記事本等.②多文檔.程序一次可以處理多個(gè)對(duì)象(文件),像word之類的,可以同時(shí)打開多個(gè)文件.③基本對(duì)話框.程序一般用于處理一些比較小的,工珍具型的軟件.像雙龍的ISP下載軟件, Easy 51Pro等都是基于對(duì)話框.一些不是很復(fù)雜的工業(yè)軟件也通常可以用基于對(duì)話框的形式,這種方式的優(yōu)點(diǎn)是所見即所得,一些控件可以像VB一樣拖到工作區(qū)就行了.選好以后直接按[完成]就可以了.至于[下一步]的向?qū)?這里我們先不管.然后會(huì)進(jìn)入以下的畫面.其中紅色及綠色是我的標(biāo)注,看不清圖片可以下載圖片放大.
選中靜態(tài)文本框[TODO:在這里設(shè)置對(duì)話框控制],單擊指標(biāo)右鍵,在彈出的快捷菜單中選擇[屬性Properties]菜單項(xiàng),彈出如下對(duì)話框
修改IDC_STATIC為IDC_FIRSTLABEL,標(biāo)題可以寫為”第一個(gè)應(yīng)用程序”然后關(guān)閉這個(gè)對(duì)話框,就可以看到剛才的靜態(tài)文本框內(nèi)容變?yōu)椤钡谝粋(gè)應(yīng)用程序”了.

在剛才的操作中,我們將靜態(tài)文本框的ID改為了IDC_FIRSTLABEL,在VC中,ID是控件的標(biāo)志,不能有相同的ID出現(xiàn),但允許多個(gè)名為IDC_STATIC的ID號(hào).所以,一般并不把近件名命為IDC_STATIC,除非以后我們不想在程序中改變這個(gè)控件的屬性.有一些控制,例如GroupBox一般并不在程序中改變什么,所以不改變其ID號(hào).ID是程序訪問控件的標(biāo)識(shí),所以一個(gè)應(yīng)用程序中不能有重復(fù)ID.
按下來我們要添加一個(gè)按鈕.
用鼠標(biāo)將控件條上的按鈕拖到對(duì)話框上,可以看到對(duì)話框上多了一個(gè)按鈕. 用上敘方法,改變按鈕ID為IDC_BTN1,標(biāo)題改為”顯示”,這樣就做好一個(gè)按鈕了.

下面我們?yōu)榘粹o添加代碼.
雙擊按鈕,會(huì)出現(xiàn)以下的提示框.
按[OK]為按鈕添加響應(yīng)函數(shù),出面以下畫面
void CEg01Dlg::OnBtn1()
{
       // TODO: Add your control notification handler code here
      
}
這一段就是剛才按鈕的函數(shù)了.當(dāng)然,現(xiàn)在還沒有響應(yīng).現(xiàn)在我們添加一個(gè)事件,讓這個(gè)按鈕按下后上面的靜態(tài)文本框的內(nèi)容變?yōu)椤贝谔?hào):COM1 波特率:57600”把上面的代碼改為
void CEg01Dlg::OnBtn1()
{
       // TODO: Add your control notification handler code here
       SetDlgItemText(IDC_FIRSTLABEL,” 串口號(hào):COM1 波特率:57600”);
}
添加完成以后,按F7編譯.如果編譯通過,按F5運(yùn)行,可以看到程序運(yùn)行后的對(duì)話框
按下按鈕,可以看到上面的靜態(tài)文本框的內(nèi)容改變了.那么恭喜你,完成我們這個(gè)例子的第一步操作了.
當(dāng)然,我這里的對(duì)話框看起來沒那么高,大家可以調(diào)一下高度.怎么退回到控件編輯狀態(tài)呢?
首先,我們單擊選項(xiàng)卡中的[ResorceView],現(xiàn)在大家只能看到[Reso…]看到IDD_EG01_DIALG了吧,這個(gè)其實(shí)也是一個(gè)ID,是我們對(duì)話框的ID,如果大家改一下對(duì)話框的ID,就可以看到這里的ID也變了.在VC中,所有的控件都認(rèn)為是窗體,只是形式不同.雙擊IDD_EG01_DIALG就可以看到我們剛才的控制編輯狀態(tài)了.雙擊[顯示]按鈕又可以回到代碼狀態(tài).
剛才的例子很簡(jiǎn)單,卻是我們以后會(huì)用得最多的.下面我們來分析一下代碼
void CEg01Dlg::OnBtn1()
{
       // TODO: Add your control notification handler code here
       SetDlgItemText (IDC_FIRSTLABEL,” 串口號(hào):COM1 波特率:57600”);
}
看看SetDlgItemText這個(gè)函數(shù),大家就會(huì)明白了, IDC_FIRSTLABEL是我們給靜態(tài)文本框分配的ID,后面的參數(shù)是要顯示的內(nèi)容.上面我們提到過,VC中的控件都認(rèn)為是窗體,所以,對(duì)于所有的文本顯示,我們都可以用這個(gè)函數(shù)來做,大家可以試著加入一個(gè)編輯框(Edit),同樣可以使用用這個(gè)函數(shù),只要ID號(hào)對(duì)了就可以了.VC對(duì)大小寫敏感,大家要注意大小寫.
下面我們用另一個(gè)方法來實(shí)現(xiàn).
把代碼改為
void CEg01Dlg::OnBtn1()
{
       // TODO: Add your control notification handler code here
       CString a;
a=” 串口號(hào):COM1 波特率:57600”;
SetDlgItemText (IDC_FIRSTLABEL,a);
}
然后按F7編譯,無(wú)誤則按F5運(yùn)行.可以看到運(yùn)行結(jié)果是一樣的.
大家可以看到,我們把變量a定義為CString類型,這個(gè)類型我們?cè)贑中可能沒有見過.CString
其實(shí)是VC中的一個(gè)類.這里我們要引入類的概念了.類跟C語(yǔ)言結(jié)構(gòu)體很像,結(jié)構(gòu)體可以有成員變量,但不能有成員函數(shù),類不但可以有成員變量,還可以有成員函數(shù),并且支持多種方法.在VC中,類以class標(biāo)識(shí).下面是一個(gè)類的定義,我們來分析一下.
class CEg01Dlg : public CDialog
{
public:
       CString GetPath(void);
protected:
       int GetMax(int a,int b);
public:
       int a;
       int b;
};
這個(gè)類是我改過的,為了大家看得明白一點(diǎn).首先,我們從這句class CEg01Dlg : public CDialog知道這個(gè)類名是CEg01Dlg,那么public后面的CDialog是什么意思呢?CDialog其實(shí)也是一個(gè)類,是VC中標(biāo)準(zhǔn)對(duì)話框類. public CDialog意思是我們定義的這個(gè)類CEg01Dlg從CDialog派生,也叫從CDialog繼承,從繼承這個(gè)詞語(yǔ)大家就會(huì)明白CEg01Dlg不但可以有自身函數(shù),而且還可以用到CDialog里的變量及函數(shù),所以說是繼承,就像我們說的繼承財(cái)產(chǎn)一樣,兒子不但可以有自己的錢,還有從老爸那里繼承的產(chǎn)財(cái),這些錢都能花.所以,我們也叫CDialog為父類(不是爸類啊),把CEg01Dlg稱為子類.當(dāng)然,這是相對(duì)的.如果再定義一個(gè)類從CEg01Dlg派生,那么CEg01Dlg也就是父類,派生出來的類就是子類.這段可能有點(diǎn)難明白,大家可以慢慢體會(huì).我們?cè)倩氐紺String上面來,這個(gè)類不是派生的,所以也沒有父類了.用CString定義一個(gè)變量a,我們稱為類變量,CString有很強(qiáng)大的功能,我們這里只用到一個(gè)功能,就是字符串,a可以是一個(gè)不定長(zhǎng)度的字符串,所以我們可以給a賦一個(gè)任意的字符串而不用關(guān)心長(zhǎng)度.當(dāng)然,我們也可以用int StringLen=a.GetLength();來獲得這個(gè)字符串的長(zhǎng)度.從這句可以看到,GetLength()是類CString里的一個(gè)函數(shù).大家可能又會(huì)關(guān)心一個(gè)問題,怎么把長(zhǎng)度顯示出來呢?我們把代碼改為
void CEg01Dlg::OnBtn1()
{
       // TODO: Add your control notification handler code here
       CString a;
       a=" 串口號(hào):COM1 波特率:57600";
       SetDlgItemText (IDC_FIRSTLABEL,a);
       a.Format("字符串的長(zhǎng)度:%d",a.GetLength());
       MessageBox(a);
}
運(yùn)行一下,效果如下
這里我們用到了類Cstring的另一個(gè)成員函數(shù)Format();這個(gè)函數(shù)用起來跟C語(yǔ)言里的Printf()很像,我就不多說明了.格式化后的字符串還是存放在a中,在這里,我們還用到了一個(gè)新的函數(shù)MessageBox();我們只是用了這個(gè)函數(shù)最簡(jiǎn)單的用法,顯示一個(gè)字符串.MessageBox用于彈出一個(gè)提示對(duì)話框.查查MSDN就知道,函數(shù)原型是
int MessageBox( LPCTSTR lpszText, LPCTSTR lpszCaption = NULL, UINT nType = MB_OK );
在VC里面,函數(shù)可以有默認(rèn)值,例如LPCTSTR lpszCaption = NULL, UINT nType = MB_OK變量lpszCaption的默認(rèn)值是NULL, nType的默認(rèn)值是MB_OK,這些有默認(rèn)值的變量我們可以不傳值,所以這個(gè)函數(shù)使用時(shí),最簡(jiǎn)單的用法就是傳lpszText就可以了.如果我們要顯示一個(gè)固定的字串,可以這樣調(diào)用MessageBox(“大家好”);是不是很簡(jiǎn)單啊?
這一章就寫到這里了,一些問題大家可以提.未盡知識(shí)點(diǎn),會(huì)在以后再詳細(xì)介紹.
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表