C++编程逻辑讲解step by step:使用对话框与控件(1)
创始人
2024-12-28 14:04:40
0

 对话框是实现人机交互的重要工具,Visual C++的对话框类似于VB或Delphi的form,对话框和各种控件的结合使用,可以建立形形色色的功能十分强大的应用程序窗口界面,这就是所谓的对话框编程技术。
    应用程序中需要各种各样的对话框,例如:消息对话框、口令对话框、进度条对话框,属性页对话框,表单对话框以及各种通用对话框(文件对话框、字体对话框、颜色对话框等)。
从执行方式又可将对话框分为模态和非模态两大类,模态对话框执行期间独占系统资源,只有在关闭之后,才可以执行程序的其它部分;非模态对话框执行期间,允许程序的其它部分同时执行。
一、口令对话框
要求:创建一个多文档工程项目,在该项目中添加一个口令对话框,以防止非法用户侵入。
 


1.建立多文档应用程序框架(工程)
操作过程略
2.编辑对话框资源
(1)在IDE的工作区中选择Resource View标签,可以在该标签页中查阅、编辑项目的各种资源;
(2)选择Dialog条目,单击鼠标右键,弹出快捷菜单,执行Insert Dialog命令,此时在Dialog条目下自动增加一个标识号(id)为IDD_DIALOG1 的条目,同时在客户区中显示对话框资源的框架。
(3)移动鼠标到对话框资源上,单击鼠标右键,在弹出的快捷菜单上执行“Properties”命令,弹出“Dialog Properties”对话框。
(4)利用“Dialog Properties”对话框进行对话框属性、风格等的设置:
a. 将默认的对话框资源标识号IDD_DIALOG1改为IDD_PASSWORD_DIALOG;
b. 将对话框的标题改为口令。
(5)调整对话框上各个控件的布局并编辑各个控件的属性
a. 利用鼠标拖动操作将两个按纽控件移动到对话框的底部。
b. 在“Push Button Properties”对话框的“General”标签页中将两个按纽的Caption属性分别改为确认和取消。(在选中的按纽上单击右键并所弹出的快捷菜单上执行“Properties”命令即可进入该对话框)。
(6)在对话框资源上增加新的控件
     需要增加的控件有:显示“请输入口令”的Static Text控件,对口令内容作简要说明的Static Text控件,口令输入框—Edit Box控件。
     增加控件的操作:
    在Control工具栏中对应的控件上单击左键,表示选中该控件;
    在对话框的对应位置上拖动鼠标以确定控件放置位置和控件大小;
    修改Static Text控件的Caption属性值,例如改为请输入口令;
    将作为口令输入框的Edit Box控件的ID标识改为IDC_PASSWORD_EDIT,并在Styles标签中选中Password属性,以将输入风格设置为口令风格(用*代替所输入的字符)。
注意:进入控件属性对话框的“Extended Styles“标签页,可以进一步设置控件的风格,例如对Static Text Clientedge、Static edge和Modal frame等属性,达到如下图所示的效果: 

(7)执行Layout菜单上的Tab Order命令以调整对话框上各个控件的激活顺序。调整时只须按需要的顺序单击对话框上的各个控件即可,控件左上角所显示的数字即表示激活顺序。
(8)单击“Dialog工具栏(在IDE窗口的下方)中的Test按纽进行对话框效果测试。
3.创建对话框类并添加代码
1)创建对话框类cPasswordDialog
操作步骤如下:
(1)在对话框资源上单击右键,在弹出的快捷菜单上选择并执行“Class Wizard”命令(也可直接View| Class Wizard),弹出“MFC Class Wizard”对话框,并紧接着弹出“Adding Class”对话框(仅当系统检测到有新建的对话框资源、菜单资源等,并且该资源尚未与相应的类建立关联,系统就会自动弹出时“Adding Class”对话框,询问是否建立新类)。
(2)在“Adding Class”对话框中直接单击“OK”按钮(确认默认选择Create anew class),进入“New Class”对话框,在New编辑框中输入类名:cPasswordDialog,其它设置均为默认值。单击“OK”按钮后进入“MFC Class Wizard”对话框(该对话框中Projects项的值为Diaolg、Class name项的值为cPasswordDialog均无须改变)。
(3)进入“MFC Class Wizard”对话框的“Member Variablee”标签页,选中Control IDs框中的IDC_PASSWORD_EDIT条目,单击“Add Variable”按钮,弹出“Add Variable”对话框。
(4)在“Add Variable”对话框中添加cPasswordDialog类的数据成员m_Password,并将该成员与Edit box控件(用作口令输入框)建立关联,该变量用来保存用户输入的口令,所以数据类型int。
(5)单击“OK”按钮,返回“MFC Class Wizard”对话框,在“Member Variablee”标签页下部新增的Minimum value、和Maximun value两个项目中分别设置口令的最小值(0)和最大值(9999),单击“OK”按钮。至此,cPasswordDialog类创建完毕,一旦创建了该类的对象后,就可以使用口令对话框了。
2)添加代码
该段代码用来创建口令对话框对象并处理用户的各种交互(例如单击“确认”按钮或“取消”按钮,输入正确的口令或输入不正确的口令,对话框对象所必须进行的处理)。
由于口令输入和验证一般都程序开始时执行,也即该对话框必须在程序窗口出现之前就提前出现,所以必须在应用程序类(CDialogApp)的InitInstance()函数中添加完成上述处理的代码:
BOOL CDialogApp::InitInstance()
{
……
pMainFrame->UpdateWindow();
cPasswordDialog cDlg;//声明CPasswordDialog类的一个对象
    if (cDlg.DoModal ()==IDOK) //用户按下确认按钮
    {
        if (cDlg.m_Password!=1925 ) //口令为整数1925
        { //如果口令不对,则显示出错信息,然后程序结束
            AfxMessageBox("口令错误,确定后将退出程序。");
            return FALSE;
        }
    } 
    else //如果按下取消按钮,程序也将结束
        return FALSE;
    return TRUE;
}
具体操作步骤如下:
(1)    在工作区的Class View标签中选中Dialog|CDiaologApp|InitInstance()函数并双击左键,客户区中显示InitInstance()函数的代码;
(2)    在InitInstance()函数中增加新的代码;

(3)    在文件Dialog.cpp的头部加入下面的命令行:
#include “cPasswordDialog.h”
   可以直接打开Dialog.cpp文件进行添加,也可以双击Globals中的The App,即可打开Dialog.cpp文件。
4. 编译、链接Dialog项目(Build Dialog)。
5. 运行Dialog项目。
二、消息对话框
1.消息对话框的作用
    消息对话框用来向用户显示一些询问和选择、警告和错误提示等信息,也可以在程序调试时,显示变量的值。
消息对话框上的主要控件:欲显示的信息内容(字符串)、图标、按纽。
2.创建消息对话框的函数
通过调用AfxMessageBox()函数或MessageBox()函数都可以创建消息对话框。
例如函数:
AfxMessageBox("您确实要取消吗?",MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2)
被调用后,将显示如下的对话框:
 


CDialogApp::InitInstance()函数加入该对话框的显示和处理后的代码如下:
BOOL CDialogApp::InitInstance()
{
……
pMainFrame->UpdateWindow();
cPasswordDialog cDlg;//声明CPasswordDialog类的一个对象
    while (1)
{
        if (cDlg.DoModal ()==IDOK) //用户按下确认按钮
        {
            if (cDlg.m_Password!=1925 ) //口令为整数1925
            { //如果口令不对,则显示出错信息,然后程序结束
             AfxMessageBox("口令错误,确定后将退出程序。");
                return FALSE;
            }
            else
                break;
        } 
        else //如果按下取消按钮,程序也将结束
        {
            if(AfxMessageBox("您确实要取消吗?",MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2)==IDYES)
               return FALSE;
        }
    }
    return TRUE;
}
3.AfxMessageBox函数简介
1)原型
   int_cdecl  AfxMessageBox (
unsigned short *, //指向显示信息字符串的指针(可以直接给出字符串常量)
unsigned int,//消息对话框风格
unsigned int 
}
    消息对话框风格是指其上的图标类型和按钮类型的组合。各种图标类型和按钮类型都用整型符号常量表示,可以使用加法运算符(+)或位或运算符(|)实现组合。例如:
MB_ICONQUESTION+MB_YESNO+MB_DEFBUTTON2
2)图标类型
 


3)按钮类型

4)函数返回值
    如下表所示:

相关内容

热门资讯

九分钟了解!哈局十三张有挂的!... 自定义新版哈局十三张有挂的系统规律,只需要输入自己想要的开挂功能,一键便可以生成出哈局十三张有挂的专...
六分钟秒懂!越乡游义乌辅助工具... 自定义新版越乡游义乌辅助工具拼三张系统规律,只需要输入自己想要的开挂功能,一键便可以生成出越乡游义乌...
两分钟秒懂!白金岛长沙麻将有猫... 两分钟秒懂!白金岛长沙麻将有猫腻的!(透视)外挂透视辅助器神器(2022已更新)-哔哩哔哩是一款可以...
四分钟体悟!哈灵麻将辅牌器!(... 四分钟体悟!哈灵麻将辅牌器!(透视)外挂透视辅助透视挂(2021已更新)-哔哩哔哩;AI智能教程细节...
五分钟掌握!中至扑克小程序辅助... 五分钟掌握!中至扑克小程序辅助器!(透视)外挂辅助软件(2024已更新)-哔哩哔哩是一款可以让一直输...
八分钟了解!欢乐龙城2有外挂的... 八分钟了解!欢乐龙城2有外挂的!(透视)外挂透视辅助插件(2022已更新)-哔哩哔哩是一款可以让一直...
7分钟掌握!至友互娱辅助器多少... 自定义新版至友互娱辅助器多少钱呢系统规律,只需要输入自己想要的开挂功能,一键便可以生成出至友互娱辅助...
3分钟掌握!中至麻将有挂的!(... 3分钟掌握!中至麻将有挂的!(透视)外挂开挂辅助器开挂(2023已更新)-哔哩哔哩;3分钟掌握!中至...
一分钟了解!八闽十三张辅助器!... 一分钟了解!八闽十三张辅助器!(透视)外挂辅助作弊(2022已更新)-哔哩哔哩是一款可以让一直输的玩...
一分钟掌握!微乐跑胡子有挂没!... 一分钟掌握!微乐跑胡子有挂没!(透视)外挂辅助脚本(2022已更新)-哔哩哔哩是一款可以让一直输的玩...