第12讲__复杂计算器_第1页
第12讲__复杂计算器_第2页
第12讲__复杂计算器_第3页
第12讲__复杂计算器_第4页
第12讲__复杂计算器_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 第12讲 复杂计算器 2 3本讲主要内容1. 新建对话框 2. 旋钮控件3. 选项卡控件41. 新建对话框 前面章节中的所有案例都是在系统默认生成的对话框上进行开发,此外VC还允许我们新建对话框并在其上完成设计工作。 本节我们将新建一个对话框,并设计完成一个房贷计算器界面。51. 新建对话框操作步骤:(1)建立新工程Complex Calculator,进入ResourceView视图。(2)在Dialog文件上单击右键,选择Insert Dialog命令,如下图所示。61. 新建对话框71. 新建对话框(3)单击右键,选择Properties窗口,修改ID为IDD_CREDIT_DIAL

2、OG。(4)删除“OK”和“Cancel”按钮。81. 新建对话框(5)双击该对话框为其添加类,如下图所示,单击“OK”按钮,输入类名,单击“OK”按钮。91. 新建对话框(6)编译、链接。102. 旋钮控件(7) 在IDD_CREDIT_DIALOG对话框中,添加下图所示的控件,控件ID分别为IDC_LOAN、IDC_RATE、IDC_MONTH、IDC_TOTALPAY、IDC_PAY和IDC_CALC,除 此 之 外 还 有 一 个 旋 钮 控 件IDC_SPIN_MONTH。旋钮控件需要与其他控件共同使用,旋钮控件的箭头按钮在按动时增大或减少一个数值,该值以数字的形式显示在一个伙伴窗口

3、中,用户既可以通过旋钮控件修改伙伴窗口中的数字也可以直接在伙伴窗口中修改。 112. 旋钮控件(7)调整控件的Tab键顺序,如下图,以保证旋钮控件与伙伴窗口的Tab键顺序相邻,且大于伙伴窗口的Tab键顺序。122. 旋钮控件(8)设置旋钮属性,如下图所示。132. 旋钮控件(9)为控件添加关联变量,如下图所示。142. 旋钮控件(10)为CCreditDlg类添加OninitDialog()函数,该函数在系统生成的主对话框中自动添加(本例为CComplexCalculatorDlg),但在新建对话框中需要手工添加。打开ClassWizard,在Message Maps中,Object IDs选

4、择CCReditDlg,Messages选择WM_INITDIALOG,单击“Add Function”按钮。152. 旋钮控件(11)在OninitDialog()函数中添加如下代码: BOOL CCReditDlg:OnInitDialog() CDialog:OnInitDialog();m_spinMonth.SetRange(0,360);/设置最大贷款月数为360,即30年return TRUE; 162. 旋钮控件(12)为“计算”按钮添加响应函数,并输入如下代码:void CCReditDlg:OnCalc() UpdateData(TRUE);double rate = m_

5、dRate/100;/等额本息贷款计算方法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)函数用来计算x的y次幂,使用该函数时需添加头文件math.h 173. 选项卡控件 到目前为止,我们已经设计并实现了两类计算器,一类是7.5节及之前讲述的整数计算器,一类是前面讲述的房贷计算器。如何将这两类计算器融合在一个程序中呢?MFC提供选项卡控件来解决这一问题。 选项卡控件

6、类似于一个文件柜上的标签。选项卡控件由多个页面组成,每个页面都有一个带有文本的标签,当用户单击一个标签就显示对应的页面。 183. 选项卡控件操作步骤:(1)打开Complex Calculator工程,双击打开IDD_COMPLEXCALCULATOR_DIALOG对话框资源,修改Caption为“复杂计算器”。在其中添加选项卡控件,修改ID为IDC_TAB,并在其Properties中的More Styles选项卡中勾选Bottom,如下图所示。 193. 选项卡控件 203. 选项卡控件(2)打开ClassWizard,在Member Variables选项卡中为IDC_TAB添加CTa

7、bCtrl类型的关联变量m_tabPanel。 (3)再插入一个新的对话框资源,ID修改为:IDD_INTEGER_CALCULATOR_DIALOG,然后参考Integer Calculator工程内容,布局控件,并为其添加CIntegerCalculatorDlg类,同时完成控件的各种操作。213. 选项卡控件( 4 ) 将 I D D _ C R E D I T _ D I A L O G 和IDD_INTEGER_CALCULATOR_DIALOG对话框资源的属性修改为下图所示。223. 选项卡控件(5)在Complex CalculatorDlg.h文件头部中添加:#include

8、CreditDlg.h#include “Integer CalculatorDlg.h“并在CComplexCalculatorDlg类中添加成员变量:CCReditDlg m_dlgCredit;CIntegerCalculatorDlg m_dlgCalc;233. 选项卡控件(6)在CComplexCalculatorDlg类的OnInitDialog()函数添加如下代码:BOOL CComplexCalculatorDlg:OnInitDialog()SetIcon(m_hIcon, FALSE);/ Set small icon/插入两个标签m_tabPanel.InsertIte

9、m(0,算术计算器算术计算器);m_tabPanel.InsertItem(1,房贷计算器房贷计算器);/创建两个对话框m_dlgCalc.Create(IDD_INTEGER_CALCULATOR_DIALOG,GetDlgItem(IDC_TAB);m_dlgCredit.Create(IDD_CREDIT_DIALOG,GetDlgItem(IDC_TAB);用于在一个选项卡控件中插入一项,其函数声明如下:BOOL InsertItem(int nItem, LPCTSTR lpszItem);nItem:新项的索引,从0开始。lpszItem:新项的标签文本指针。 CDialog:Cr

10、eate()函数的功能是创建对话框对象,函数声明为:BOOL Create (UINT nIDTemplate, CWnd* pParentWnd = NULL)nIDTemplate:对话框资源ID。pParentWnd:该对话框的父窗口。243. 选项卡控件/获得IDC_TAB客户区大小CRect rs;m_tabPanel.GetClientRect(&rs);/调整子对话框在父窗口中的位置rs.top+=8; rs.bottom-=40; rs.left+=8; rs.right-=8; /设置子对话框尺寸并移动到指定位置m_dlgCalc.MoveWindow(&rs

11、);m_dlgCredit.MoveWindow(&rs);/分别设置隐藏和显示m_dlgCalc.ShowWindow(true);m_dlgCredit.ShowWindow(false);/设置默认的选项卡m_tabPanel.SetCurSel(0); return TRUE; / return TRUE unless you set the focus to a control用于设置选项卡中当前被选择的项,其函数声明如下:int SetCurSel(int nItem);nItem:将要设置被选择项的索引。253. 选项卡控件(7)选项卡控件切换处理,打开ClassWiza

12、rd,在Message Maps选项卡中为IDC_TAB添加TCN_SELCHANGE消息响应函数,并输入如下代码:263. 选项卡控件void CComplexCalculatorDlg:OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) int CurSel = m_tabPanel.GetCurSel();/获得选项卡中当前被选中标签的索引 switch(CurSel) case 0:/如果第一个标签被选中,显示数值计算器对话框,同时隐藏贷款计算器 m_dlgCalc.ShowWindow(true); m_dlgCredit.ShowWind

13、ow(false); break; case 1:/如果第二个标签被选中,隐藏数值计算器对话框,同时显示贷款计算器 m_dlgCalc.ShowWindow(false); m_dlgCredit.ShowWindow(true); break; *pResult = 0;用于获得选项卡中当前被选择的项,其函数声明如下:int GetCurSel() const;273. 选项卡控件(8)编译、链接、运行。284. 补充【例7-11】使用旋钮控件控制小数的增减 294. 补充操作步骤:(1)创建基于对话框的SpinButton工程。(2)删除对话框中原有的“确定”、“取消”按钮和静态文本控件,

14、然后添加1个静态文本控件、1个文本编辑框控件和一个旋钮控件,并修改Caption,布局如下图所示。304. 补充(3)修改控件ID,文本编辑框控件ID为IDC_RATE,旋钮控件ID为IDC_SPIN。 (4)修改控件属性,IDC_RATE控件的Styles选项卡中Align text修改为Right,IDC_SPIN控件的Styles选项卡中勾选Auto buddy选项。(5)修改对话框Caption为“旋钮示例”。(6)为IDC_RATE控件添加double类型的关联变量m_dRate,并设置其最小值为0.0,最大值 为 1 0 0 . 0 , 为 I D C _ S P I N 控 件

15、添 加CSpinButtonCtrl类型关联变量m_spin。314. 补充(7)在OnInitDialog()函数添加如下代码: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. 补充(8)单击菜单View|ClassWiz

16、ard命令,在Message Maps选项卡中为CSpinButtonDlg添加WM_VSCROLL消息响应函数OnVScroll()。334. 补充(9)在函数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,文本编辑框内容每次变化0.01UpdateData(FALSE);CDialog:OnVScroll(nSBCode, nPos, pScrollBar);344. 补充(10)单击菜单View|Cla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论