




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1 第12講 復(fù)雜計(jì)算器 2 3本講主要內(nèi)容1. 新建對話框 2. 旋鈕控件3. 選項(xiàng)卡控件41. 新建對話框 前面章節(jié)中的所有案例都是在系統(tǒng)默認(rèn)生成的對話框上進(jìn)行開發(fā),此外VC還允許我們新建對話框并在其上完成設(shè)計(jì)工作。 本節(jié)我們將新建一個(gè)對話框,并設(shè)計(jì)完成一個(gè)房貸計(jì)算器界面。51. 新建對話框操作步驟:(1)建立新工程Complex Calculator,進(jìn)入ResourceView視圖。(2)在Dialog文件上單擊右鍵,選擇Insert Dialog命令,如下圖所示。61. 新建對話框71. 新建對話框(3)單擊右鍵,選擇Properties窗口,修改ID為IDD_CREDIT_DIAL
2、OG。(4)刪除“OK”和“Cancel”按鈕。81. 新建對話框(5)雙擊該對話框?yàn)槠涮砑宇?,如下圖所示,單擊“OK”按鈕,輸入類名,單擊“OK”按鈕。91. 新建對話框(6)編譯、鏈接。102. 旋鈕控件(7) 在IDD_CREDIT_DIALOG對話框中,添加下圖所示的控件,控件ID分別為IDC_LOAN、IDC_RATE、IDC_MONTH、IDC_TOTALPAY、IDC_PAY和IDC_CALC,除 此 之 外 還 有 一 個(gè) 旋 鈕 控 件IDC_SPIN_MONTH。旋鈕控件需要與其他控件共同使用,旋鈕控件的箭頭按鈕在按動時(shí)增大或減少一個(gè)數(shù)值,該值以數(shù)字的形式顯示在一個(gè)伙伴窗口
3、中,用戶既可以通過旋鈕控件修改伙伴窗口中的數(shù)字也可以直接在伙伴窗口中修改。 112. 旋鈕控件(7)調(diào)整控件的Tab鍵順序,如下圖,以保證旋鈕控件與伙伴窗口的Tab鍵順序相鄰,且大于伙伴窗口的Tab鍵順序。122. 旋鈕控件(8)設(shè)置旋鈕屬性,如下圖所示。132. 旋鈕控件(9)為控件添加關(guān)聯(lián)變量,如下圖所示。142. 旋鈕控件(10)為CCreditDlg類添加OninitDialog()函數(shù),該函數(shù)在系統(tǒng)生成的主對話框中自動添加(本例為CComplexCalculatorDlg),但在新建對話框中需要手工添加。打開ClassWizard,在Message Maps中,Object IDs選
4、擇CCReditDlg,Messages選擇WM_INITDIALOG,單擊“Add Function”按鈕。152. 旋鈕控件(11)在OninitDialog()函數(shù)中添加如下代碼: BOOL CCReditDlg:OnInitDialog() CDialog:OnInitDialog();m_spinMonth.SetRange(0,360);/設(shè)置最大貸款月數(shù)為360,即30年return TRUE; 162. 旋鈕控件(12)為“計(jì)算”按鈕添加響應(yīng)函數(shù),并輸入如下代碼:void CCReditDlg:OnCalc() UpdateData(TRUE);double rate = m_
5、dRate/100;/等額本息貸款計(jì)算方法m_dPay = m_dLoan * (rate*pow(1+rate,m_nMonth)/(pow(1+rate,m_nMonth)-1);m_dTotalPay = m_dPay*m_nMonth;UpdateData(FALSE);(13)編譯、鏈接。其中pow(x,y)函數(shù)用來計(jì)算x的y次冪,使用該函數(shù)時(shí)需添加頭文件math.h 173. 選項(xiàng)卡控件 到目前為止,我們已經(jīng)設(shè)計(jì)并實(shí)現(xiàn)了兩類計(jì)算器,一類是7.5節(jié)及之前講述的整數(shù)計(jì)算器,一類是前面講述的房貸計(jì)算器。如何將這兩類計(jì)算器融合在一個(gè)程序中呢?MFC提供選項(xiàng)卡控件來解決這一問題。 選項(xiàng)卡控件
6、類似于一個(gè)文件柜上的標(biāo)簽。選項(xiàng)卡控件由多個(gè)頁面組成,每個(gè)頁面都有一個(gè)帶有文本的標(biāo)簽,當(dāng)用戶單擊一個(gè)標(biāo)簽就顯示對應(yīng)的頁面。 183. 選項(xiàng)卡控件操作步驟:(1)打開Complex Calculator工程,雙擊打開IDD_COMPLEXCALCULATOR_DIALOG對話框資源,修改Caption為“復(fù)雜計(jì)算器”。在其中添加選項(xiàng)卡控件,修改ID為IDC_TAB,并在其Properties中的More Styles選項(xiàng)卡中勾選Bottom,如下圖所示。 193. 選項(xiàng)卡控件 203. 選項(xiàng)卡控件(2)打開ClassWizard,在Member Variables選項(xiàng)卡中為IDC_TAB添加CTa
7、bCtrl類型的關(guān)聯(lián)變量m_tabPanel。 (3)再插入一個(gè)新的對話框資源,ID修改為:IDD_INTEGER_CALCULATOR_DIALOG,然后參考Integer Calculator工程內(nèi)容,布局控件,并為其添加CIntegerCalculatorDlg類,同時(shí)完成控件的各種操作。213. 選項(xiàng)卡控件( 4 ) 將 I D D _ C R E D I T _ D I A L O G 和IDD_INTEGER_CALCULATOR_DIALOG對話框資源的屬性修改為下圖所示。223. 選項(xiàng)卡控件(5)在Complex CalculatorDlg.h文件頭部中添加:#include
8、CreditDlg.h#include “Integer CalculatorDlg.h“并在CComplexCalculatorDlg類中添加成員變量:CCReditDlg m_dlgCredit;CIntegerCalculatorDlg m_dlgCalc;233. 選項(xiàng)卡控件(6)在CComplexCalculatorDlg類的OnInitDialog()函數(shù)添加如下代碼:BOOL CComplexCalculatorDlg:OnInitDialog()SetIcon(m_hIcon, FALSE);/ Set small icon/插入兩個(gè)標(biāo)簽m_tabPanel.InsertIte
9、m(0,算術(shù)計(jì)算器算術(shù)計(jì)算器);m_tabPanel.InsertItem(1,房貸計(jì)算器房貸計(jì)算器);/創(chuàng)建兩個(gè)對話框m_dlgCalc.Create(IDD_INTEGER_CALCULATOR_DIALOG,GetDlgItem(IDC_TAB);m_dlgCredit.Create(IDD_CREDIT_DIALOG,GetDlgItem(IDC_TAB);用于在一個(gè)選項(xiàng)卡控件中插入一項(xiàng),其函數(shù)聲明如下:BOOL InsertItem(int nItem, LPCTSTR lpszItem);nItem:新項(xiàng)的索引,從0開始。lpszItem:新項(xiàng)的標(biāo)簽文本指針。 CDialog:Cr
10、eate()函數(shù)的功能是創(chuàng)建對話框?qū)ο?,函?shù)聲明為:BOOL Create (UINT nIDTemplate, CWnd* pParentWnd = NULL)nIDTemplate:對話框資源ID。pParentWnd:該對話框的父窗口。243. 選項(xiàng)卡控件/獲得IDC_TAB客戶區(qū)大小CRect rs;m_tabPanel.GetClientRect(&rs);/調(diào)整子對話框在父窗口中的位置rs.top+=8; rs.bottom-=40; rs.left+=8; rs.right-=8; /設(shè)置子對話框尺寸并移動到指定位置m_dlgCalc.MoveWindow(&rs
11、);m_dlgCredit.MoveWindow(&rs);/分別設(shè)置隱藏和顯示m_dlgCalc.ShowWindow(true);m_dlgCredit.ShowWindow(false);/設(shè)置默認(rèn)的選項(xiàng)卡m_tabPanel.SetCurSel(0); return TRUE; / return TRUE unless you set the focus to a control用于設(shè)置選項(xiàng)卡中當(dāng)前被選擇的項(xiàng),其函數(shù)聲明如下:int SetCurSel(int nItem);nItem:將要設(shè)置被選擇項(xiàng)的索引。253. 選項(xiàng)卡控件(7)選項(xiàng)卡控件切換處理,打開ClassWiza
12、rd,在Message Maps選項(xiàng)卡中為IDC_TAB添加TCN_SELCHANGE消息響應(yīng)函數(shù),并輸入如下代碼:263. 選項(xiàng)卡控件void CComplexCalculatorDlg:OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) int CurSel = m_tabPanel.GetCurSel();/獲得選項(xiàng)卡中當(dāng)前被選中標(biāo)簽的索引 switch(CurSel) case 0:/如果第一個(gè)標(biāo)簽被選中,顯示數(shù)值計(jì)算器對話框,同時(shí)隱藏貸款計(jì)算器 m_dlgCalc.ShowWindow(true); m_dlgCredit.ShowWind
13、ow(false); break; case 1:/如果第二個(gè)標(biāo)簽被選中,隱藏?cái)?shù)值計(jì)算器對話框,同時(shí)顯示貸款計(jì)算器 m_dlgCalc.ShowWindow(false); m_dlgCredit.ShowWindow(true); break; *pResult = 0;用于獲得選項(xiàng)卡中當(dāng)前被選擇的項(xiàng),其函數(shù)聲明如下:int GetCurSel() const;273. 選項(xiàng)卡控件(8)編譯、鏈接、運(yùn)行。284. 補(bǔ)充【例7-11】使用旋鈕控件控制小數(shù)的增減 294. 補(bǔ)充操作步驟:(1)創(chuàng)建基于對話框的SpinButton工程。(2)刪除對話框中原有的“確定”、“取消”按鈕和靜態(tài)文本控件,
14、然后添加1個(gè)靜態(tài)文本控件、1個(gè)文本編輯框控件和一個(gè)旋鈕控件,并修改Caption,布局如下圖所示。304. 補(bǔ)充(3)修改控件ID,文本編輯框控件ID為IDC_RATE,旋鈕控件ID為IDC_SPIN。 (4)修改控件屬性,IDC_RATE控件的Styles選項(xiàng)卡中Align text修改為Right,IDC_SPIN控件的Styles選項(xiàng)卡中勾選Auto buddy選項(xiàng)。(5)修改對話框Caption為“旋鈕示例”。(6)為IDC_RATE控件添加double類型的關(guān)聯(lián)變量m_dRate,并設(shè)置其最小值為0.0,最大值 為 1 0 0 . 0 , 為 I D C _ S P I N 控 件
15、添 加CSpinButtonCtrl類型關(guān)聯(lián)變量m_spin。314. 補(bǔ)充(7)在OnInitDialog()函數(shù)添加如下代碼:BOOL CSpinButtonDlg:OnInitDialog()SetIcon(m_hIcon, FALSE);/ Set small iconm_spin.SetRange(0,1000);/旋鈕范圍m_spin.SetPos(0);/旋鈕初始值UpdateData(FALSE);return TRUE; / return TRUE unless you set the focus to a control324. 補(bǔ)充(8)單擊菜單View|ClassWiz
16、ard命令,在Message Maps選項(xiàng)卡中為CSpinButtonDlg添加WM_VSCROLL消息響應(yīng)函數(shù)OnVScroll()。334. 補(bǔ)充(9)在函數(shù)OnVScroll ()中添加代碼如下:void CSpinButtonDlg:OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) / TODO: Add your message handler code here and/or call defaultif(pScrollBar-GetDlgCtrlID() = IDC_SPIN)/如果垂直滾動的控件是旋鈕IDC_SPINm_dRate = nPos/10.0;/將旋鈕值除10.0,如果除100,文本編輯框內(nèi)容每次變化0.01UpdateData(FALSE);CDialog:OnVScroll(nSBCode, nPos, pScrollBar);344. 補(bǔ)充(10)單擊菜單View|Cla
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 淮北師范大學(xué)《煤的潔凈燃燒與高效利用技術(shù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 合肥幼兒師范高等??茖W(xué)校《編程開發(fā)》2023-2024學(xué)年第二學(xué)期期末試卷
- 河北師范大學(xué)《量子力學(xué)ⅡA》2023-2024學(xué)年第二學(xué)期期末試卷
- 長沙學(xué)院《舞臺演播室形體》2023-2024學(xué)年第二學(xué)期期末試卷
- 西北工業(yè)大學(xué)《飛行器制導(dǎo)與控制》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖州職業(yè)技術(shù)學(xué)院《金屬材料制備實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 華南農(nóng)業(yè)大學(xué)珠江學(xué)院《運(yùn)籌學(xué)與系統(tǒng)工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 江海職業(yè)技術(shù)學(xué)院《服裝設(shè)計(jì)原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱科學(xué)技術(shù)職業(yè)學(xué)院《服裝生產(chǎn)工藝與經(jīng)營管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 西安外事學(xué)院《現(xiàn)代化學(xué)基礎(chǔ)》2023-2024學(xué)年第二學(xué)期期末試卷
- 小學(xué)語文教師基本功大賽試卷及答案
- 海南省義務(wù)教育學(xué)校辦學(xué)基本標(biāo)準(zhǔn)(試行)
- 某切眼掘進(jìn)工作面開口施工的安全技術(shù)措施
- 古代職業(yè)-三教九流
- 某醫(yī)院安全生產(chǎn)三項(xiàng)制度(安全生產(chǎn)責(zé)任制、制度、操作規(guī)程)匯編
- 音樂鑒賞之歌曲鑒賞ppt
- 2022年我國新能源汽車產(chǎn)業(yè)發(fā)展趨勢分析
- 國開電大《工程數(shù)學(xué)(本)》形成性考核作業(yè)5答案
- 部編版道德與法治六年級下冊第二單元《愛護(hù)地球共同責(zé)任》大單元作業(yè)設(shè)計(jì)
- 西藏自治區(qū)2021年小升初數(shù)學(xué)考試真題與答案解析
- 2023年全國統(tǒng)一高考地理試卷(新課標(biāo))(含解析)
評論
0/150
提交評論