C++编程逻辑讲解step by step:使用对话框与控件(2)

使用对话框与控件

Visual c++提供的选项类控件有:单选按钮—Radio Button ,复选按钮—Check Button,下拉式列表框—Com Box,此外还使用组合框(Group Box)将表示选项的多个单选按钮或复选按钮组织成一个整体。下面的程序实在项目P3的基础上,添加模态对话框,并在该对话框上放置上述各种具有选择能力的控件,形成“选单”窗口程序。其对话框如下图所示:
 

1.    编辑对话框资源
参照3.1.2所给的操作方法,在项目中编辑图3-3-1所示的对话框资源,其上的几个主要控件的主要属性设置如下,其它属性大多选择默认值: 

控件

ID号

Caption

Radio Button (男)

IDC_SEX1

Radio Button (女)

IDC_SEX2

Check Box(登山)

IDC_INSTEREST1

登山

Check Box(游泳)

IDC_INSTEREST2

游泳

Check Box(看书)

IDC_INSTEREST3

看书

Check Box(旅游)

IDC_INSTEREST3

旅游

Combo Box(学历)

IDC_COMBO

Edit Box(学历框的下方)

IDC_EDIT

2.为新增的对话框创建对话框类
3.添加菜单资源
在项目Dialog中添加一个一级菜单项,其二级菜单的第一个功能项用来打开所设计的“选项对话框”。
操作步骤如下:
(1)    在工作区的Resoure View标签页中展开Menu列表,双击IDR_DIALOGTYPE条目,打开菜单资源。
(2)    将最后一个一级菜单项目(“帮助”)后面的空白项目移动到你所希望的位置上(本例是移到“查看”项目之后),在空白项目上双击左键,即可进入“Menu Item Properties”对话框,在该框的Caption栏中输入菜单项目名:对话。
(3)    编辑下拉菜单的各个功能项
在一级菜单项上单击左键即可弹出对应的二级菜单列表,在列表的空白项上双击左键,进入“Menu Item Properties”对话框,在该框的ID栏内输入该项目的ID:ID_DIAOLG_MODALDIALOG(缺省名为ID_DIAOLG_MENU1),在Caption栏内输入菜单项目名:个人资料录入(&I)。此时系统自动为该菜单项目添加了响应函数。
    重复以上操作,直至编辑完二级菜单的多个功能项目。

4. 添加菜单响应函数及其代码
    菜单命令是由视类来响应的,因此必须在该类中添加菜单命令响应函数(本例为OnDialogModaldialog()函数),该函数与COMMAND消息有关。
    操作步骤如下:
1)    执行“View | ClassWizard”命令,弹出“MFC Class Wizard”对话框;
2)    在“MFC Class Wizard”对话框中选择或设定如下项目:
(1)    选择需要添加函数的类(Class name:CDialogView)
(2)    选择菜单项目ID(Object  ID:ID_DIALOG_MODALDIALOG)
(3)    选择对应的Messages(Message:COMMAND)
3)单击“ADD Function”按钮,弹出“Add Member Function”对话框,使用默认的函数名(OnDialogModaldialog),单击“OK”按钮返回,“MFC Class Wizard”对话框,再单击“OK”按钮,则函数添加成功。
    在所添加的函数中增加如下代码:
void CDialogView::OnDialogModallessdialog() 
{
    // TODO: Add your command handler code here
    CDialogModal m_Dlg;
    m_Dlg.DoModal();
    
}

5.为新增的对话框类添加成员
1)添加数据成员
(1)所添加的数据成员如下:
m_Combo,下拉列表框控件CComBox的实例;
m_Edit,CString的实例;
m_Radio,Cbutton的实例。
     可以看出对话框类的数据成员大多是复杂类型数据,原因是对话框上放置了各种各样的控见,这些控件都是类,其实例对象嵌入到对话框类中,构成更复杂的类,所以对话框类又有“容器类”。之称。
(2)操作步骤:
① 执行“View | ClassWizard”命令,弹出“MFC Class Wizard”对话框;
② 选择对话框类,Class name:CDialogModal;
③ 切换到“Member Variables”标签页,如下图所示,该图列出了对话框上所有控件的Control IDs,选择需要添加变量的Control Ids后,单击“Add Variable”按钮,弹出“Add Member Variable”对话框;
④“Add Member Variable”对话框的“Member Variable”框内输入变量名,在“Category”框内选择变量种类(一般选择Control),在“Variable Type”框内选择变量类型”;
⑤ 单击“OK”按钮返回“MFC Class Wizard”对话框,继续进行变量添加,直至所有变量添加完毕,单击“OK”,结束变量添加工作。
 


2)添加成员函数
(1)添加如下函数:
    初始化函数,OnInitDialog(),该函数执行性别框和学历框的初始设置;
    “Ok”按钮的响应函数,OnOk(),该函数响应BM_CLICK消息,将用户选择的各个选项(性别,学历,兴趣、爱好),组成一个字符串,赋给m_Edit,通过“文本框”控件显示该字符串。
    “Cancel”按钮的响应函数,OnCancel(),该函数该函数响应BM_CLICK消息,用来退出并关闭模态对话框。
(2)操作步骤(略)
(3)三个函数的代码
BOOL CDialogModal::OnInitDialog()
{
    CDialog::OnInitDialog();
    //TODO:Add extra initialization here
    m_Radio.SetCheck(1);//将设置Raiod Button的缺省值为“男”
    m_Combo.InsertString(0,"小学");//往下拉列表框中加入选项
    m_Combo.InsertString(1,"初中");
    m_Combo.InsertString(2,"高中");
    m_Combo.InsertString(3,"大学");
    m_Combo.InsertString(4,"本科以上");
    m_Combo.SetCurSel(3);//把大学设置为缺省值
    return TRUE;//return TRUN unless you set the focus to a control
                //EXCEPTION:OCX Property Pages should return FALSE
}
void CDialogModal::OnOK()
{
    //TODO:Add your controlnotification handler code here
CString str;
    if (m_Radio.GetCheck())
        str+="先生";
    else
        str+="小姐";
    str+="你好,您的爱好是:";
    BOOL flag=0;
    CButton *p;
    //得到指向IDC_INSTEREST1(第一个复选框按钮)的指针
    p=(CButton *)GetDlgItem (IDC_INSTEREST1);
    if (p->GetCheck())  //判断是否选中“登山”
    {
        str+="登山";
        flag=1;
    }
    //得到指向IDC_INSTEREST3(第二个复选框按钮)的指针
    p=(CButton *)GetDlgItem (IDC_INSTEREST2);
    if (p->GetCheck())  //判断是否选中“游泳”
    {
        str+="游泳";
        flag=1;
    }
    //得到指向IDC_INSTEREST3(第三个复选框按钮)的指针
    p=(CButton *)GetDlgItem (IDC_INSTEREST3);
    if (p->GetCheck())  //判断是否选中“看书”
    {
        str+="看书";
        flag=1;
    }
    //得到指向IDC_INSTEREST4(第四个复选框按钮)的指针
    p=(CButton *)GetDlgItem (IDC_INSTEREST4);
    if (p->GetCheck())  //判断是否选中“旅游”
    {
        str+="旅游";
        flag=1;
    }
    if (!flag)
       str+="未选择";
    str+=" ,您的学历是:";
    int number;
    CString temp;
    number = m_Combo.GetCurSel();//得到当前选中的序号
    m_Combo.GetLBText(number,temp);//得到序号为number的选项对应的内容
    str+=temp;
    m_Edit=str;
    UpdateData (false);//更新文本框的内容
}

void CDialogModal::OnCancel() 
{
    // TODO: Add extra cleanup here
    
    CDialog::OnCancel();
}

6.修改视类源文件(DialogView.cpp)
   由于视类的OnDialogModaldialog() 函数中使用对话框类定义了一个对话框对象:CDialogModal m_Dlg;所以必须在视类的源文件中加入对话框类的head文件:
    #include “DialogModal.h”
7.项目的编译、链接和运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值