进制转换计算器_第1页
进制转换计算器_第2页
进制转换计算器_第3页
进制转换计算器_第4页
进制转换计算器_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、第11讲 进制转换计算器 本讲主要内容1. 单选按钮控件2. 复选框控件1. 单选按钮控件单选按钮时一个圆圈和文本标签组合,当它被选中时,圆圈中就标上一个黑点。单选按钮通常是分组使用,同一组的单选按钮具有互斥性,即某一单选按钮被选中会清除同组内其他单选按钮的选中状态。 通过将某一单选按钮properties中general选项卡中勾选group标识某一组开始,直到下一个group标识出现,其顺序是tab键顺序(单击菜单layout|tab order命令)。 1. 单选按钮控件操作步骤:(1)打开integer calculator工程,添加2个单选 按 钮 , 如 下 图 所 示 , 其 i

2、 d 值 分 别 为idc_radiodec和idc_radiooct。2. 单选按钮控件(2)选中idc_radiodec控件properties中general选项卡中group选项。(3)打开classwizard的member variables选项卡,为idc_radiodec添加关联变量m _ n h e x , 如 下 图 所 示 , 并 在cintegercalculatordlg类的构造函数中将其初始值改为0,表示10进制为默认选项。 。 1. 单选按钮控件1. 单选按钮控件(4)为打开classwizard的message maps选项卡,为idc_radiodec和idc

3、_radiooct添加bn_clicked消息,生成onradiodec()和onradiooct()函数,并添加如下代码 : 1. 单选按钮控件void cintegercalculatordlg:onradiodec() cbutton *p8 = (cbutton*)getdlgitem(idc_b8);/通过id得到按钮控件对象的指针p8-enablewindow(true); /使按钮可用cbutton *p9 = (cbutton*)getdlgitem(idc_b9);p9-enablewindow(true);transform();/进制转换其中getdlgitem()函数的

4、功能是根据控件id获取对话框中控件的句柄,其函数声明为:cwnd* getdlgitem(int nid) const;其中nid为控件的id值。 而enablewindow()函数是cwnd类的成员函数,功能是使窗口允许或禁止,其函数声明为:bool enablewindow( bool benable = true );其中benable为true,则窗口被允许,为false,则窗口将被禁止。 void cdialog10dlg:onradiooct() / todo: add your control notification handler code herecbutton *p8 =

5、 (cbutton*)getdlgitem(idc_b8);/通过id得到按钮控件对象的指针p8-enablewindow(false); /使按钮不可用cbutton *p9 = (cbutton*)getdlgitem(idc_b9);p9-enablewindow(false);transform();/进制转换1. 单选按钮控件(5)编写transform()函数,在integercalculatordlg.h文件中添加函数声明void transform();,在integercalculatordlg.cpp文件中添加如下代码。 void cintegercalculatordlg

6、:transform()updatedata(true);/获得数据if(m_nhex = 0)/10进制单选按钮被选中m_nvalue = octtodec(m_nvalue);/将8进制转换为10进制else/8进制单选按钮被选中char s830;itoa(m_nvalue,s8,8);/将10进制转换为8进制m_nvalue = atoi(s8);updatedata(false);/更新界面,显示转换后结果 octtodec()函数为自定义函数,功能是将8进制数值转换为10进制数值 同样10进制转换为8进制,我们也可以参照上面的思路编写一个转换函数,也可以采用现有的库函数进行转换。

7、itoa()函数的功能是将整数转换为字符串,其原型为:char *itoa(int value,char *string,int radix);其中参数含义为:value:待转换整数。string:转换后字符串指针radix:转换基数,可以是2进制、8进制、10进制和16进制。 atoi()函数的功能是将字符串转换为整数,转换过称谓跳过前面的空格字符,直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时(/0)才结束转换,并将结果返回。其函数原型为:int atoi(const char *nptr);其中参数含义为:nptr:待转换字符串。1. 单选按钮控件 其中octtodec

8、()函数为自定义函数,功能是将10进制数值转换为8进制数值,函数代码如下:int cintegercalculatordlg:octtodec(int value)int result=0;/结果变量int num = 0;/次幂变量while (value != 0) int low = value%10;/取个位数int mul = 1;for(int i=0;igetcheck()cbutton *pdec = (cbutton*)getdlgitem(idc_radiodec);pdec-enablewindow(true);cbutton *poct = (cbutton*)getd

9、lgitem(idc_radiooct);poct-enablewindow(true);getcheck()函数的功能是获得复选框的选中状态,其函数声明为:int getcheck() const;其返回值为0:按钮处于未选中状态。1:按钮处于选中状态。2:按钮状态不定(仅当按钮风格为bs_3state或bs_auto3state时)如果按钮是其它风格,则返回0。为了代码清晰,系统为其做了宏定义:#define bst_unchecked 0 x0000#define bst_checked 0 x0001#define bst_indeterminate 0 x0002 2. 复选框按钮(

10、3)在oncheckhex ()函数中添加如下代码 :elsecbutton *pdec = (cbutton*)getdlgitem(idc_radiodec);pdec-enablewindow(false);cbutton *poct = (cbutton*)getdlgitem(idc_radiooct);poct-enablewindow(false);2. 复选框按钮(4)为了使对话框在初始运行时保持正常状态,需在oninitdialog()函数中添加如下代码:bool cintegercalculatordlg:oninitdialog()seticon(m_hicon, fal

11、se);/ set small iconcbutton *pdec = (cbutton*)getdlgitem(idc_radiodec);pdec-enablewindow(false);cbutton *poct = (cbutton*)getdlgitem(idc_radiooct);poct-enablewindow(false);2. 复选框按钮(5)编译、链接、运行。3. 补充案例【例【例7-9】 世界杯知识小测验该问卷调查包括3道题目,两道单选题,一道多选题,单选题选项采用单选按钮控件实现,多选题选项采用复选框控件实现。3. 补充案例实现步骤:(1)创建基于对话框的survey

12、工程。(2)删除对话框中原有的“确定”、“取消”按钮和静态文本控件,然后添加4个单选按钮控件、3个复选框控件、4个静态文本控件和1个按钮,并修改caption。3. 补充案例(3)修改控件id,单选按钮控件id依次为idc_euro、idc_afri、idc_spain、idc_holland,复选框控件id依次为idc_italy、idc_france、idc_brazil,按钮控件id为idc_submit。3. 补充案例(4)修改控件的tab order,单击菜单layout|tab order命令,通过鼠标点击修改为下图所示顺序。3. 补充案例(5)将控件idc_euro和idc_sp

13、ain的general选项卡中group选项选中。(6)修改对话框caption为“世界杯知识小测验”。(7)为控件添加关联变量,如下图所示。3. 补充案例3. 补充案例(8)为按钮控件idc_submit添加消息响应函数,单击菜单view|classwizard命令,在message maps选项卡中为idc_submit按钮添加bn_clicked消息响应函数onsubmit()。3. 补充案例(9)在函数onsubmit()中添加代码如下:void csurveydlg:onsubmit() updatedata(true);/获得用户操作if(m_nhost = -1 | m_nchampion = -1) /检查题目是否做完afxmessagebox(题目未完成,请填写完整!题目未完成,请填写完整!);return;int ncount = 0; /答对题目数量3. 补充案例if(m_nhost = 1) /第一题答案为非洲ncount+;if(m_nchampion = 0) /第二题答案为西班牙ncoun

温馨提示

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

评论

0/150

提交评论