第8章(4) 進制轉(zhuǎn)換計算器-y_第1頁
第8章(4) 進制轉(zhuǎn)換計算器-y_第2頁
第8章(4) 進制轉(zhuǎn)換計算器-y_第3頁
第8章(4) 進制轉(zhuǎn)換計算器-y_第4頁
第8章(4) 進制轉(zhuǎn)換計算器-y_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第8章對話框和控件(4)

本講主要內(nèi)容1.單選按鈕控件2.復選框控件整數(shù)計算器采用十進制整數(shù)進行運算,除此之外整數(shù)還有十六進制、八進制和二進制表示方式,Windows系統(tǒng)的計算器就具有該功能。本節(jié)將參照其功能,實現(xiàn)十進制與八進制之間的相互轉(zhuǎn)換,并從中學習單選按鈕和復選框控件的使用方法8.5.1單選按鈕控件單選按鈕由一個圓圈和文本標簽組合而成,當它被選中時,圓圈中就標上一個黑點。單選按鈕通常是分組使用,同一組的單選按鈕具有互斥性,即某一單選按鈕被選中會清除同組內(nèi)其他單選按鈕的選中狀態(tài)。通過勾選某一單選按鈕RadioButtonProperties對話框中General選項卡的Group選項,標識某一組單選按鈕的開始。【例8-8】進制轉(zhuǎn)換計算器。能夠完成10進制和8進制整數(shù)之間的轉(zhuǎn)換。在實現(xiàn)功能之前,首先需要考慮整數(shù)的不同進制如何轉(zhuǎn)換?對于一個整數(shù),無論是十進制還是八進制都只是在顯示方式上有所區(qū)分,其本質(zhì)仍然是同一個數(shù)值。操作步驟:(1)打開IntegerCalculator工程,添加2個單選按鈕,如下圖所示,其ID值分別為IDC_RADIODEC和IDC_RADIOOCT。(2)選中IDC_RADIODEC控件Properties中General選項卡中Group選項。(3)打開ClassWizard的MemberVariables選項卡,為IDC_RADIODEC添加關(guān)聯(lián)變量m_nChoice,并在CIntegerCalculatorDlg類的構(gòu)造函數(shù)中將其初始值改為0,表示10進制為默認選項。(4)打開ClassWizard的MessageMaps選項卡,為IDC_RADIODEC和IDC_RADIOOCT添加BN_CLICKED消息,生成OnRadiodec()和OnRadiooct()函數(shù),并添加如下代碼:voidCIntegerCalculatorDlg::OnRadiodec(){ //通過ID得到按鈕控件對象的指針 CButton*p8=((CButton*)GetDlgItem(IDC_B8));

p8->EnableWindow(TRUE); //使按鈕可用

CButton*p9=((CButton*)GetDlgItem(IDC_B9)); p9->EnableWindow(TRUE); transform(); //進制轉(zhuǎn)換}其中GetDlgItem()函數(shù)的功能是根據(jù)控件ID獲取對話框中控件的句柄,其函數(shù)聲明為:CWnd*GetDlgItem(intnID)const;其中nID為控件的ID值。而EnableWindow()函數(shù)是CWnd類的成員函數(shù),功能是使窗口允許或禁止,其函數(shù)聲明為:BOOLEnableWindow(BOOLbEnable=TRUE);其中bEnable為TRUE,則窗口被允許,為FALSE,則窗口將被禁止。(5)編寫transform()函數(shù),在IntegerCalculatorDlg.h文件中添加函數(shù)聲明voidtransform();,在IntegerCalculatorDlg.cpp文件中添加如下代碼。voidCIntegerCalculatorDlg::transform(){ UpdateData(TRUE); //獲得數(shù)據(jù)

if(m_nChoice==0) //10進制單選按鈕被選中

m_nValue=octToDec(m_nValue); //將8進制轉(zhuǎn)換為10進制

else //8進制單選按鈕被選中

{ chars8[30]; itoa(m_nValue,s8,8); //將10進制轉(zhuǎn)換為8進制

m_nValue=atoi(s8); } UpdateData(FALSE); //更新界面,顯示轉(zhuǎn)換后結(jié)果}octToDec()函數(shù)為自定義函數(shù),功能是將8進制數(shù)值轉(zhuǎn)換為10進制數(shù)值同樣10進制轉(zhuǎn)換為8進制,讀者也可以參照這個思路編寫一個轉(zhuǎn)換函數(shù),但為了讓讀者能夠更多地學習知識點,采用系統(tǒng)中存在函數(shù)進行轉(zhuǎn)換。itoa()函數(shù)的功能是將整數(shù)轉(zhuǎn)換為字符串,其原型為:char

*itoa(int

value,char

*string,int

radix);其中參數(shù)含義為:value:待轉(zhuǎn)換整數(shù)。string:轉(zhuǎn)換后字符串指針radix:轉(zhuǎn)換基數(shù),可以是2進制、8進制、10進制和16進制。(5)編寫transform()函數(shù),在IntegerCalculatorDlg.h文件中添加函數(shù)聲明voidtransform();,在IntegerCalculatorDlg.cpp文件中添加如下代碼。voidCIntegerCalculatorDlg::transform(){ UpdateData(TRUE); //獲得數(shù)據(jù)

if(m_nChoice==0) //10進制單選按鈕被選中

m_nValue=octToDec(m_nValue); //將8進制轉(zhuǎn)換為10進制

else //8進制單選按鈕被選中

{ chars8[30]; itoa(m_nValue,s8,8); //將10進制轉(zhuǎn)換為8進制

m_nValue=atoi(s8); } UpdateData(FALSE); //更新界面,顯示轉(zhuǎn)換后結(jié)果}atoi()函數(shù)的功能是將字符串轉(zhuǎn)換為整數(shù),轉(zhuǎn)換過程為跳過前面的空格字符,直到遇上數(shù)字或正負符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。其函數(shù)原型為:intatoi(constchar*nptr);其中參數(shù)含義為:nptr:待轉(zhuǎn)換字符串。其中octToDec()函數(shù)為自定義函數(shù),功能是將八進制數(shù)值轉(zhuǎn)換為十進制數(shù)值,函數(shù)代碼如下:intCIntegerCalculatorDlg::octToDec(intvalue){

intresult=0; //結(jié)果變量

intnum=0; //次冪變量

while(value!=0) { intlow=value%10; //取個位數(shù)

intmul=1;

for(inti=0;i<num;i++) //該位數(shù)為8的num次冪

mul*=8; result=result+low*mul; //累加結(jié)果

num++; value=value/10; //去掉個位數(shù)

} returnresult; //返回計算結(jié)果}(6)修改計算過程,在OnBequal()函數(shù)做如下修改:voidCIntegerCalculatorDlg::OnBequal(){ …… m_nOperand2=m_nValue;

if(m_nChoice==1) //如果是8進制

{ m_nOperand1=octToDec(m_nOperand1);//將運算數(shù)轉(zhuǎn)換為10進制

m_nOperand2=octToDec(m_nOperand2); } switch(m_nOperator){ …… }

if(m_nChoice==1) //如果是8進制

{ chars8[30]; itoa(m_nValue,s8,8); //將計算結(jié)果以8進制顯示

m_nValue=atoi(s8); } ……}(7)編譯、鏈接、運行。8.5.2復選框按鈕 為了實現(xiàn)進制功能的開啟與關(guān)閉,采用復選框控件作為切換控件。標準的復選框在文本標簽旁邊有一個方框,當該選項被選中時,方框內(nèi)出現(xiàn)一個“√”號,當該項未被選中時,方框內(nèi)空白?!纠?-9】在例8-8基礎(chǔ)上,完成帶進制功能控制的整數(shù)計算器。(1)打開IntegerCalculator工程,添加復選框控件IDC_CHECKCHOICE。(2)打開ClassWizard的MessageMaps選項卡,為IDC_CHECKCHOICE添加BN_CLICKED消息,生成OnCheckchoice()函數(shù)。(3)在OnCheckchoice()函數(shù)中添加如下代碼:

voidCIntegerCalculatorDlg::OnCheckchoice(){

CButton*pHex=((CButton*)GetDlgItem(IDC_CHECKHEX)); //如果復選框選中

if(BST_CHECKED==pHex->GetCheck()) { CButton*pDec=((CButton*)GetDlgItem(IDC_RADIODEC)); pDec->EnableWindow(TRUE); CButton*pOct=((CButton*)GetDlgItem(IDC_RADIOOCT)); pOct->EnableWindow(TRUE); }GetCheck()函數(shù)的功能是獲得復選框的選中狀態(tài),其函數(shù)聲明為:intGetCheck()const;其返回值為0:按鈕處于未選中狀態(tài)。1:按鈕處于選中狀態(tài)。2:按鈕狀態(tài)不定(僅當按鈕風格為BS_3STATE或BS_AUTO3STATE時)如果按鈕是其它風格,則返回0。為了代碼清晰,系統(tǒng)為其做了宏定義:#defineBST_UNCHECKED0x0000#defineBST_CHECKED0x0001#defineBST_INDETERMINATE0x0002

else { CButton*pDec=((CButton*)GetDlgItem(IDC_RADIODEC)); pDec->EnableWindow(FALSE); CButton*pOct=((CButton*)GetDlgItem(IDC_RADIOOCT)); pOct->EnableWindow(FALSE); }}(4)為了使對話框在初始運行時保持正常狀態(tài),需在OnInitDialog()函數(shù)中添加如下代碼:BOOLCIntegerCalculatorDlg::OnInitDialog(){ …… SetIcon(m_hIcon,FALSE); //Setsmallicon

CButton*pDec=((CButton*)GetDlgItem(IDC_RADIODEC)); pDec->EnableWindow(FALSE); CButton*pOct=((CButton*)GetDlgItem(IDC_RADIOOCT)); pOct->EnableWindow(FALSE); ……}(5)編譯、鏈接、運行。8.5.3補充案例【例8-10】

世界杯知識小測驗 該測驗包括3道題目,兩道單選題,一道多選題,單選題選項采用單選按鈕控件實現(xiàn),多選題選項采用復選框控件實現(xiàn)。編程步驟:(1)創(chuàng)建基于對話框的Survey工程。(2)刪除對話框中原有的“確定”、“取消”按鈕和靜態(tài)文本控件,然后添加4個單選按鈕控件、3個復選框控件、4個靜態(tài)文本控件和1個按鈕,并修改Caption。(3)修改控件ID,單選按鈕控件ID依次為IDC_EURO、IDC_AFRI、IDC_SPAIN、IDC_HOLLAND,復選框控件ID依次為IDC_ITALY、IDC_FRANCE、IDC_BRAZIL,按鈕控件ID為IDC_SUBMIT。(4)修改控件的TabOrder,單擊菜單Layout|TabOrder命令,通過鼠標點擊修改為下圖所示順序。(5)將控件IDC_EURO和IDC_SPAIN的General選項卡中Group選項選中。(6)修改對話框Caption為“世界杯知識小測驗”。(7)為控件添加關(guān)聯(lián)變量,如下圖所示。(8)為按鈕控件IDC_SUBMIT添加消息響應函數(shù),單擊菜單V

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論