版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第8章對話框和控件(4)
本講主要內(nèi)容1.單選按鈕控件2.復(fù)選框控件整數(shù)計算器采用十進制整數(shù)進行運算,除此之外整數(shù)還有十六進制、八進制和二進制表示方式,Windows系統(tǒng)的計算器就具有該功能。本節(jié)將參照其功能,實現(xiàn)十進制與八進制之間的相互轉(zhuǎn)換,并從中學習單選按鈕和復(fù)選框控件的使用方法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復(fù)選框按鈕 為了實現(xiàn)進制功能的開啟與關(guān)閉,采用復(fù)選框控件作為切換控件。標準的復(fù)選框在文本標簽旁邊有一個方框,當該選項被選中時,方框內(nèi)出現(xiàn)一個“√”號,當該項未被選中時,方框內(nèi)空白?!纠?-9】在例8-8基礎(chǔ)上,完成帶進制功能控制的整數(shù)計算器。(1)打開IntegerCalculator工程,添加復(fù)選框控件IDC_CHECKCHOICE。(2)打開ClassWizard的MessageMaps選項卡,為IDC_CHECKCHOICE添加BN_CLICKED消息,生成OnCheckchoice()函數(shù)。(3)在OnCheckchoice()函數(shù)中添加如下代碼:
voidCIntegerCalculatorDlg::OnCheckchoice(){
CButton*pHex=((CButton*)GetDlgItem(IDC_CHECKHEX)); //如果復(fù)選框選中
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ù)的功能是獲得復(fù)選框的選中狀態(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),多選題選項采用復(fù)選框控件實現(xiàn)。編程步驟:(1)創(chuàng)建基于對話框的Survey工程。(2)刪除對話框中原有的“確定”、“取消”按鈕和靜態(tài)文本控件,然后添加4個單選按鈕控件、3個復(fù)選框控件、4個靜態(tài)文本控件和1個按鈕,并修改Caption。(3)修改控件ID,單選按鈕控件ID依次為IDC_EURO、IDC_AFRI、IDC_SPAIN、IDC_HOLLAND,復(fù)選框控件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添加消息響應(yīng)函數(shù),單擊菜單V
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 選擇性必修一 Unit 1 People of Achievement(教師版)
- 核心素養(yǎng)下信息科技大單元教學實施策略與反思
- 河南科技大學《建筑文化概論》2021-2022學年第一學期期末試卷
- 河北地質(zhì)大學《職業(yè)民主管理》2023-2024學年第一學期期末試卷
- 行業(yè)展會-石墨滑石公司展示
- 崗位職責說明書
- 河北地質(zhì)大學《廣告媒介策略》2021-2022學年第一學期期末試卷
- 檢驗批容量匯編表
- 降壓藥市場分析及投資價值研究報告
- 燃氣公司資產(chǎn)評估報告
- 《高速公路瀝青路面施工技術(shù)規(guī)范》
- 醫(yī)藥銷售激勵方案
- 反校園霸凌法制課件
- 《設(shè)計素描》課件-第七節(jié) 解構(gòu)與重構(gòu)
- 基礎(chǔ)詩詞格律
- 樹牢總體國家安全觀
- 第二單元大單元教學設(shè)計 2023-2024學年統(tǒng)編版高中語文必修上冊
- 商業(yè)銀行貸款風險提示
- 2024年3月25日公安部遴選面試真題及解析
- 工具快換裝置配置介紹
- 青島版科學五年級上冊全冊練習題(含答案)
評論
0/150
提交評論