




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 第12講 復(fù)雜計(jì)算器 2 3本講主要內(nèi)容1. 新建對(duì)話框 2. 旋鈕控件3. 選項(xiàng)卡控件41. 新建對(duì)話框 前面章節(jié)中的所有案例都是在系統(tǒng)默認(rèn)生成的對(duì)話框上進(jìn)行開(kāi)發(fā),此外VC還允許我們新建對(duì)話框并在其上完成設(shè)計(jì)工作。 本節(jié)我們將新建一個(gè)對(duì)話框,并設(shè)計(jì)完成一個(gè)房貸計(jì)算器界面。51. 新建對(duì)話框操作步驟:(1)建立新工程Complex Calculator,進(jìn)入ResourceView視圖。(2)在Dialog文件上單擊右鍵,選擇Insert Dialog命令,如下圖所示。61. 新建對(duì)話框71. 新建對(duì)話框(3)單擊右鍵,選擇Properties窗口,修改ID為IDD_CREDIT_DIAL
2、OG。(4)刪除“OK”和“Cancel”按鈕。81. 新建對(duì)話框(5)雙擊該對(duì)話框?yàn)槠涮砑宇?lèi),如下圖所示,單擊“OK”按鈕,輸入類(lèi)名,單擊“OK”按鈕。91. 新建對(duì)話框(6)編譯、鏈接。102. 旋鈕控件(7) 在IDD_CREDIT_DIALOG對(duì)話框中,添加下圖所示的控件,控件ID分別為IDC_LOAN、IDC_RATE、IDC_MONTH、IDC_TOTALPAY、IDC_PAY和IDC_CALC,除 此 之 外 還 有 一 個(gè) 旋 鈕 控 件IDC_SPIN_MONTH。旋鈕控件需要與其他控件共同使用,旋鈕控件的箭頭按鈕在按動(dòng)時(shí)增大或減少一個(gè)數(shù)值,該值以數(shù)字的形式顯示在一個(gè)伙伴窗口
3、中,用戶既可以通過(guò)旋鈕控件修改伙伴窗口中的數(shù)字也可以直接在伙伴窗口中修改。 112. 旋鈕控件(7)調(diào)整控件的Tab鍵順序,如下圖,以保證旋鈕控件與伙伴窗口的Tab鍵順序相鄰,且大于伙伴窗口的Tab鍵順序。122. 旋鈕控件(8)設(shè)置旋鈕屬性,如下圖所示。132. 旋鈕控件(9)為控件添加關(guān)聯(lián)變量,如下圖所示。142. 旋鈕控件(10)為CCreditDlg類(lèi)添加OninitDialog()函數(shù),該函數(shù)在系統(tǒng)生成的主對(duì)話框中自動(dòng)添加(本例為CComplexCalculatorDlg),但在新建對(duì)話框中需要手工添加。打開(kāi)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ù)用來(lái)計(jì)算x的y次冪,使用該函數(shù)時(shí)需添加頭文件math.h 173. 選項(xiàng)卡控件 到目前為止,我們已經(jīng)設(shè)計(jì)并實(shí)現(xiàn)了兩類(lèi)計(jì)算器,一類(lèi)是7.5節(jié)及之前講述的整數(shù)計(jì)算器,一類(lèi)是前面講述的房貸計(jì)算器。如何將這兩類(lèi)計(jì)算器融合在一個(gè)程序中呢?MFC提供選項(xiàng)卡控件來(lái)解決這一問(wèn)題。 選項(xiàng)卡控件
6、類(lèi)似于一個(gè)文件柜上的標(biāo)簽。選項(xiàng)卡控件由多個(gè)頁(yè)面組成,每個(gè)頁(yè)面都有一個(gè)帶有文本的標(biāo)簽,當(dāng)用戶單擊一個(gè)標(biāo)簽就顯示對(duì)應(yīng)的頁(yè)面。 183. 選項(xiàng)卡控件操作步驟:(1)打開(kāi)Complex Calculator工程,雙擊打開(kāi)IDD_COMPLEXCALCULATOR_DIALOG對(duì)話框資源,修改Caption為“復(fù)雜計(jì)算器”。在其中添加選項(xiàng)卡控件,修改ID為IDC_TAB,并在其Properties中的More Styles選項(xiàng)卡中勾選Bottom,如下圖所示。 193. 選項(xiàng)卡控件 203. 選項(xiàng)卡控件(2)打開(kāi)ClassWizard,在Member Variables選項(xiàng)卡中為IDC_TAB添加CTa
7、bCtrl類(lèi)型的關(guān)聯(lián)變量m_tabPanel。 (3)再插入一個(gè)新的對(duì)話框資源,ID修改為:IDD_INTEGER_CALCULATOR_DIALOG,然后參考Integer Calculator工程內(nèi)容,布局控件,并為其添加CIntegerCalculatorDlg類(lèi),同時(shí)完成控件的各種操作。213. 選項(xiàng)卡控件( 4 ) 將 I D D _ C R E D I T _ D I A L O G 和IDD_INTEGER_CALCULATOR_DIALOG對(duì)話框資源的屬性修改為下圖所示。223. 選項(xiàng)卡控件(5)在Complex CalculatorDlg.h文件頭部中添加:#include
8、CreditDlg.h#include “Integer CalculatorDlg.h“并在CComplexCalculatorDlg類(lèi)中添加成員變量:CCReditDlg m_dlgCredit;CIntegerCalculatorDlg m_dlgCalc;233. 選項(xiàng)卡控件(6)在CComplexCalculatorDlg類(lèi)的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è)對(duì)話框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開(kāi)始。lpszItem:新項(xiàng)的標(biāo)簽文本指針。 CDialog:Cr
10、eate()函數(shù)的功能是創(chuàng)建對(duì)話框?qū)ο螅瘮?shù)聲明為:BOOL Create (UINT nIDTemplate, CWnd* pParentWnd = NULL)nIDTemplate:對(duì)話框資源ID。pParentWnd:該對(duì)話框的父窗口。243. 選項(xiàng)卡控件/獲得IDC_TAB客戶區(qū)大小CRect rs;m_tabPanel.GetClientRect(&rs);/調(diào)整子對(duì)話框在父窗口中的位置rs.top+=8; rs.bottom-=40; rs.left+=8; rs.right-=8; /設(shè)置子對(duì)話框尺寸并移動(dòng)到指定位置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)卡控件切換處理,打開(kāi)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ì)算器對(duì)話框,同時(shí)隱藏貸款計(jì)算器 m_dlgCalc.ShowWindow(true); m_dlgCredit.ShowWind
13、ow(false); break; case 1:/如果第二個(gè)標(biāo)簽被選中,隱藏?cái)?shù)值計(jì)算器對(duì)話框,同時(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)建基于對(duì)話框的SpinButton工程。(2)刪除對(duì)話框中原有的“確定”、“取消”按鈕和靜態(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)修改對(duì)話框Caption為“旋鈕示例”。(6)為IDC_RATE控件添加double類(lèi)型的關(guān)聯(lián)變量m_dRate,并設(shè)置其最小值為0.0,最大值 為 1 0 0 . 0 , 為 I D C _ S P I N 控 件
15、添 加CSpinButtonCtrl類(lèi)型關(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)/如果垂直滾動(dòng)的控件是旋鈕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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 高端家居用品生產(chǎn)項(xiàng)目實(shí)施方案
- 網(wǎng)絡(luò)安全與信息保護(hù)管理方案
- 多功能數(shù)據(jù)傳輸及充電接口一體化產(chǎn)品生產(chǎn)項(xiàng)目實(shí)施方案
- 門(mén)頭房屋租賃合同書(shū)(20篇)
- 高職院校學(xué)生工匠精神培育的背景意義及必要性
- 農(nóng)網(wǎng)專(zhuān)員面試題及答案
- 多方合作模式下災(zāi)害信息員的工作機(jī)制
- hadoop面試題及答案
- 學(xué)院選拔面試題目及答案
- 新醫(yī)院會(huì)計(jì)面試題及答案
- 提高藏族學(xué)生漢語(yǔ)寫(xiě)作能力的方法
- 3D打印技術(shù)與應(yīng)用智慧樹(shù)知到期末考試答案2024年
- 預(yù)防盜竊教育
- 《精益生產(chǎn)培訓(xùn)》課件
- 紀(jì)檢干部心理培訓(xùn)課件模板
- 地基基礎(chǔ)工程監(jiān)理實(shí)施細(xì)則
- 《紅樓夢(mèng)》中的愛(ài)情觀與婚姻制度的評(píng)析
- 《生命的意義》課件
- 中國(guó)中小學(xué)生積極心理品質(zhì)量表心理課之后
- 永久供電施工方案
- GB 5009.88-2023食品安全國(guó)家標(biāo)準(zhǔn)食品中膳食纖維的測(cè)定
評(píng)論
0/150
提交評(píng)論