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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

*itoa(int

value,char

*string,int

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

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

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

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

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

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

intresult=0; //結果變量

intnum=0; //次冪變量

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

intmul=1;

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

mul*=8; result=result+low*mul; //累加結果

num++; value=value/10; //去掉個位數

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

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

{ m_nOperand1=octToDec(m_nOperand1);//將運算數轉換為10進制

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

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

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

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

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()函數的功能是獲得復選框的選中狀態(tài),其函數聲明為: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()函數中添加如下代碼: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道題目,兩道單選題,一道多選題,單選題選項采用單選按鈕控件實現,多選題選項采用復選框控件實現。編程步驟:(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)為控件添加關聯變量,如下圖所示。(8)為按鈕控件IDC_SUBMIT添加消息響應函數,單擊菜單V

溫馨提示

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

最新文檔

評論

0/150

提交評論