当前位置:科技动态 > 在vs2010对话框中添加按钮_

在vs2010对话框中添加按钮_

  • 发布:2023-10-04 09:29

?创建对话框资源需要创建对话框模板、修改对话框属性、向对话框添加各种控件等步骤。在上一讲中,季培米已经讲过创建对话框模板和修改对话框的属性。本节继续说明如何向对话框添加控件。

??????在上一讲中,季培米创建了一个名为“Addition”的项目,目的是生成一个实现加法运算的应用程序。实现加法计算有几个必要因素:被加数、加数和和。需要输入被加数和加数,输出和显示总和。那么这些因素就需要相应的控件来输入或显示。下面,季佩米将一步步讲解如何添加这些控件。

??????1.在对话框中添加一个静态文本框(Static Text),用于显示字符串——“summand”。

??????一个标题为“TODO:在此处放置对话框控件”的静态文本框。自动添加到上一讲生成的资源模板中。我们可以修改它的标题并继续使用它,也可以删除它。为了从头开始说明添加静态文本框的过程,将其删除,继续添加新的静态文本框。

??????删除控件时,可以用鼠标左键单击选中该控件。选择后,控件周围会出现一个虚线框,然后按Delete键将其删除。在“Addition”项目的资源视图中打开上一讲中创建的对话框模板 IDD_ADDITION_DIALOG。使用此方法可以删除自动添加的静态文本框。

??????在添加新的静态文本框之前,首先检查是否显示“工具箱”视图。如果没有,请单击菜单栏上的“视图”->“工具箱”。工具箱视图如下所示:

?????? Toolbox列出了一些常用的控件,其中之一是Static Text,这就是我们要添加的控件。在工具箱中的静态文本上单击鼠标左键,不要松开,然后将其拖动到 IDD_ADDITION_DIALOG 对话框模板中。模板上将出现一个虚线框。我们找到一个合适的位置,松开鼠标左键将其放下。

??????用鼠标左键选择该控件后,其周围会出现一个虚线框。然后将鼠标移动到虚线框上的黑点上,它就会变成双向箭头的形状。这时,可以按下鼠标左键并拖动来改变控件的大小。我们可以通过这种方式改变新添加的静态文本框控件的大小,以更好地显示标题。当然,整个对话框模板也可以通过这种方式调整大小。

??????接下来是修改静态文本框的文本的时候了。右键单击静态文本框,在右键菜单中选择“属性”。将显示“属性”面板。将面板上的 Caption 属性修改为“summand”,并将 ID 修改为 IDC_SUMMAND_STATIC。此时模板如下图:

??????2.在对话框中添加一个编辑框(Edit Control),用于输入被加数。

??????添加编辑框的过程与静态文本框的过程类似。选择工具箱中的Edit Control控件并将其拖至对话框模板中,并与之前的静态文本框水平对齐(为了美观)。然后调整其大小以适合被加数的输入。

??????右键单击编辑框,仍然在右键菜单中选择“属性”,显示属性面板,并将其ID更改为IDC_SUMMAND_EDIT。此时模板如下图:

??????3.按照1的方法添加一个标题为“Addend”的静态文本框,用于显示字符串“Addend”。并将其ID更改为IDC_ADDEND_STATIC。

??????4.按照方法2添加一个ID为IDC_ADDEND_EDIT的编辑框,用于输入加数。

??????5.按照步骤1的方法添加一个标题为“和”的静态文本框,用于显示文字“和”。并将其ID修改为IDC_SUM_STATIC。

??????6.按照方法2添加一个ID为IDC_SUM_EDIT的编辑框来显示最终的总和。

??????7.在对话框模板中添加一个类似按钮(Button)的控件,点击后触发加法计算。将其标题修改为“计算”,将 ID 修改为 IDC_ADD_BUTTON。

??????此时对话框模板如下图:

??????8.删除确定按钮。打开“取消”按钮的属性面板,将标题更改为“退出”,并与“计算”按钮水平对齐。

??????9.根据控件的布局,适当调整整个对话框模板的大小,使其相对于控件布局大小合适,界面美观。

??????这样,我们本例中需要使用的控件就已经添加到了对话框模板中。最终效果如下:

??????至此,我们的对话框资源就基本创建完成了。应用程序运行后的界面效果已经非常清晰了。稍后我会讲如何在对话框类中实现加法计算功能并与界面很好地交互。欢迎大家继续在小鸡啄米博客上交流。

转载自:http://www.sychzs.cn/software/181.html

转载于:https://www.sychzs.cn/gd-luojialin/p/9649934.html

在前两场讲座中,季培米讲解了如何创建对话资源。创建对话框资源后,您所要做的就是生成对话框类。重申一下,生成对话框类主要包括创建新的对话框类、添加控件的控制变量和消息处理函数等。

??????因为Jipeimi给你的例程Addition是一个基于对话框的程序,所以程序自动创建对话框模板IDD_ADDITION_DIALOG并自动生成对话框类CAdditionDlg,该类是从CDialogEx类Derived派生的。用过VC++ 6.0的人可能还记得,我们定义的对话框类都是继承自CDialog类,但在VS2010中,一般的对话框类都是继承自CDialogEx类。

??????创建一个对话框类

??????如果是新添加的对话框模板,如何为其创建对话框类?

?????? 1、首先如第六讲:创建对话框模板和修改对话框属性中所述,右键单击资源视图的“对话框”节点,然后选择右键菜单选择“插入对话框”,新建一个对话框对话框模板,并使用默认的 IDD_DIALOG1 作为 ID。

?????? 2、中间区域会显示新的对话框模板,然后选中这个对话框模板,单击鼠标右键,在右键菜单中选择“添加类”。

?

?????? 3、选择“添加类”后,会弹出一个对话框。只需在对话框中“类名”下的编辑框中写入自定义的类名即可,如CMyDialog。

?????? 4、最后点击“完成”即可完成。

??????最后在Class View中可以看到新生成的对话框类CMyDialog,并且在Solution Explorer中生成了对应的MyDialog.h头文件和MyDialog.cpp源文件。 CMyDialog 类也派生自 CDialogEx 类。

??????注意,一般类名以C开头,另一个例子是CTestDlg。

??????向对话框中的控件添加变量

??????在上一讲中,对话框中添加了几个控件,包括三个静态文本框、三个编辑框和一个按钮控件。程序自动生成的取消按钮保留为退出按钮,而确定按钮则被删除。

??????静态文本框只是为了解释下面编辑框中数据的含义,无论是加数、加数还是和,所以它们不会改变,我们不会给它们添加变量。按钮控件用于操作,这里不添加变量。编辑框中的数据可能会频繁更改,因此有必要将变量与其每个控件关联起来。

??????首先将变量添加到被加数的编辑框IDC_SUMMAND_EDIT中。

?????? 1、右键单击编辑框,在右键菜单中选择“添加变量”。弹出添加成员变量的向导对话框。

?????? 2. 我们想要添加一个值变量而不是控制变量,因此在对话框中“类别”下的组合框中选择“值”。

?????? 3. 在“变量类型”下的组合框中,默认选择“CString”。 CString是字符串类,显然不能添加。我们可以选择double、float、int等,这里我们选择double,即编辑框关联一个double类型的变量。

?????? 4. 在“变量名”中写入自定义变量名。鸡啄食了米饭,并将其命名为m_editSummand。

?????? 5、点击“完成”即可完成。

??????注意,类的成员变量名一般以m_开头,以标识其为成员变量。

??????参考这个方法,然后将double变量m_editAddend添加到加数编辑框IDD_ADDEND_EDIT中,将double变量m_editSum添加到编辑框IDD_SUM_EDIT中。

??????对话框类数据交换与验证

??????在程序运行界面中,用户经常会改变控件的属性,例如,在编辑框中输入字符串,或者改变组合框的选中项,或者改变复选框的选中状态等。当控件的属性改变后,MFC会相应地修改控件关联变量的值。这种同步变化是通过MFC为对话框类自动生成的成员函数DoDataExchange()来实现的。这也称为对话框的数据交换和验证机制。

?????????在三个编辑框中添加变量后,AdditionDlg.cpp 中的 CAdditionDlg 的 DoDataExchange() 函数的函数体中又多了 3 个 DDX_Text 调用语句。下面是函数体代码以及季培米添加的注释。

C++ 代码

void?CAdditionDlg::DoDataExchange(CDataExchange*?pDX) ??{ ??????//?处理MFC默认数据交换???????CDialogEx::DoDataExchange(pDX); ?? //处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换??????DDX_Text(pDX,?IDC_SUMMAND_EDIT,?m_editSummand); ??????//?过程控制IDC_ADDEND_EDIT与变量m_editAddend之间的数据交换??????DDX_Text(pDX,?IDC_ADDEND_EDIT,?m_editAddend);??????//?过程控制IDC_SUM_EDIT之间的数据交换和变量 m_editSum?????? ?DDX_Text(pDX,?IDC_SUM_EDIT,?m_editSum); ??}??

??????我们以Addition程序为例简单说一下数据交换机制。如果我们在程序运行界面中输入被加数,则可以通过CAddition的DoDataExchange()函数将输入的值保存到m_editSummand变量中。反之,如果在程序运行过程中修改了变量 m_editSummand 的值,则 CAdition 的 DoDataExchange() 函数也可以将新的变量值显示到加数的编辑框中。

??????然而,在这种数据交换机制中,不会自动调用DoDataExchange()。相反,我们需要在程序中调用CDialogEx::UpdateData()函数,然后自动调用UpdateData()函数DoDataExchange()。

?????? CDialogEx::UpdateData()函数的原型是:

?????? BOOL UpdateData(BOOL bSaveAndValidate = TRUE);

??????参数:bSaveAndValidate 用于指示数据传输的方向。 TRUE 表示从控件传递到变量,FALSE 表示从变量传递到控件。默认值为 TRUE,它从控件传递到变量。

??????返回值:CDialogEx::UpdateData()函数的返回值表示操作是否成功。如果成功,则返回 TRUE,否则返回 FALSE。

??????下一讲,季培米将详细演示如何使用CDialogEx::UpdateData()函数。

??????本节主要讲创建新的对话框类以及添加控制变量。控件的消息处理函数将在下一讲详细介绍。还是欢迎大家回到吉培米博客学习和讨论。

?

转载自:http://www.sychzs.cn/software/181.html

?

转载于:https://www.sychzs.cn/gd-luojialin/p/9649935.html

由于个人问题,吉佩米已经暂停更新几天了。首先向关注吉培米更新的朋友们表示歉意。

??????让我们回到主题。在上一节中,我们讨论了编辑框的使用。本节继续讲解常用控件——按钮控件的使用。

??????按钮控件简介

??????按钮控件包括命令按钮(Button)、单选按钮(Radio Buttons)和复选框(Check Box)。命令按钮就是我们之前多次提到的狭义的按钮控件。用于响应用户的鼠标点击操作并进行相应的处理。它可以显示文本或嵌入位图。当使用单选按钮时,它们通常被分组为一组。组中每个单选按钮的选中状态具有互斥关系,即同一组中只能选择一个单选按钮。

??????命令按钮是最熟悉、最常用的按钮控件,而单选按钮和复选框都是特殊的按钮控件。单选按钮有两种状态:选中和未选中。当它被选中时,单选按钮的中心会出现一个蓝点来标识所选状态。一般复选框也有两种状态:选中和未选中。选中后,复选框中会添加一个“√”,而三态复选框(用BS_3STATE样式设置)则有选中、未选中、未定义三种状态。状态,当状态不确定时,复选框中会出现灰色“√”。

??????按钮控件将向父窗口发送通知消息。最常用的通知消息是 BN_CLICKED 和 BN_DOUBLECLICKED。当用户在按钮上单击鼠标时,会向父窗口发送 BN_CLICKED 消息,而当用户双击鼠标时,会发送 BN_DOUBLECLICKED 消息。

??????创建按钮控件

?????? MFC提供了CButton类,封装了按钮控件的所有操作。

??????在前面的教程中,我们直接在对话框模板上添加了按钮控件资源,但在一些特殊情况下我们需要动态创建按钮控件,即通过CButton类的成员函数Create来实现。创建按钮。以下是Create函数的原型:

virtual BOOL Create( ?? LPCTSTR lpszCaption, ?? DWORD dwStyle, ?? const RECT& rect, ?? CWnd* pParentWnd, ?? UINT nID );

??????参数说明:

?????? lpszCaption:指定按钮控件显示的文本。

?????? dwStyle:指定按钮控件的样式,可以设置为以下按钮样式的任意组合。

?????? BS_AUTOCHECKBOX:与BS_CHECKBOX相同,但是点击鼠标时按钮会自动反转?????? BS_AUTORADIOBUTTON:与BS_RADIOBUTTON相同,但是当你点击鼠标时按钮会自动反转??? ? BS_AUTO3STATE:与BS_3STATE相同,但单击按钮时状态会改变??????BS_CHECKBOX:在矩形按钮右侧指定一个带有标题的选择框?????? BS_DEFPUSHBUTTON:指定默认命令按钮,该按钮周围有一个黑框。用户可以按Enter键快速选择按钮。 BS_GROUPBOX:指定组框。 BS_LEFTTEXT:使控件的标题出现在按钮的左侧。 ?????? BS_OWNERDRAW:指定自绘按钮?????? BS_PUSHBUTTON:指定命令按钮??? BS_RADIOBUTTON:指定单选按钮在圆形按钮右侧显示文本??? ?? BS_3STATE:与 BS_CHECKBOX 相同,但控件有 3 种状态 - 选中、未选中和灰显

??????当然,除了上面列出的样式外,一般还会为按钮设置WS_CHILD、WS_VISIBLE、WS_TABSTOP等样式。 WS_TABSTOP样式使按钮控件具有制表位属性,即按tab键切换焦点控件时,可以将焦点停止在按钮控件上。创建一组单选按钮时,第一个按钮的样式应设置为 WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON,其他单选按钮的样式应设置为 WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,不包括 WS_TABSTOP 和 WS_GROUP。

??????当按钮控件直接添加到对话框模板中时,其属性包含上述样式。例如,复选框的 Tri_state 属性实际上代表 BS_3STATE 样式。

??????其余三个参数与静态文本框的Create函数中对应的参数类似。可以参考前面静态文本框的解释,也可以查MSDN。

?

?????? CButton类主要成员函数

??????以下是CButton类的一些主要成员函数。至于其他的功能,你可以在MSDN中查看。

?????? HBITMAP SetBitmap(HBITMAP hBitmap);

??????设置要在按钮中显示的位图。参数hBitmap是位图的句柄。返回值是按钮原始位图的句柄。

?????? ?HBITMAP GetBitmap( ) const;

??????获取先前由 SetBitmap 函数设置的按钮位图的句柄。

??????void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);

??????设置按钮的样式。参数nStyle指定按钮的样式,bRedraw指定按钮是否重绘。如果为 TRUE,则会重新绘制。否则不会重画。默认是重绘。 ?

??????UINT GetButtonStyle( ) const;

??????获取按钮控件的样式。

?????? void SetCheck(int nCheck);

??????设置按钮的选择状态。参数nCheck为0表示未勾选状态,1表示勾选状态,2表示不确定状态(仅适用于复选框)。

??????int GetCheck( ) const;

??????获取按钮的选择状态。返回值的含义与SetCheck函数的nCheck参数相同。

?????? HCURSOR SetCursor(HCURSOR hCursor);

??????设置按钮上显示的光标图像。 hCursor 参数指定游标句柄。返回值是按钮原始光标的句柄。

?????? HCURSOR GetCursor( );

??????获取先前由 SetCursor 设置的光标的句柄。

?????? HICON SetIcon(HICON hIcon);

??????设置按钮上显示的图标。 hIcon 参数指定图标的句柄。返回值是按钮原始图标的句柄。

?????? HICON GetIcon( ) const;

??????获取先前由 SetIcon 设置的图标的句柄。

?????? void SetState(BOOL bHighlight);

??????设置按钮的高亮状态。参数bHighlight指定按钮是否高亮。如果不为0,则高亮显示,否则取消高亮状态。

?????? UINT GetState( ) const;

??????获取按钮控件的选择状态、突出显示状态和焦点状态。我们可以通过将返回值与每个掩码进行AND运算来获取各种状态值。 mask对应的AND结果如下:

??????掩码0x0003:用于获取单选按钮或复选框的状态。 AND 结果为 0 表示未选中,1 表示选中,2 表示不确定状态(仅适用于复选框)。 ??????Mask 0x0004:用于判断按钮是否高亮。非零值表示该按钮突出显示。单击并按住鼠标左键时,该按钮会突出显示。 ???? ?Mask 0x0008:AND 结果是一个非零值,表示按钮具有输入焦点。

??????下面列出了从CWnd类继承的几个成员函数。通过它们来获取或设置按钮控件的状态非常方便。您只需要知道按钮的 ID 即可。

?????? void CheckDlgButton(int nIDButton,UINT nCheck);

??????用于设置按钮的选择状态。参数nIDButton指定按钮的ID。 nCheck 的值为 0 表示按钮未被选中,值为 1 表示按钮被选中,值为 2 表示按钮处于不确定状态(仅适用于复选框)。

?????? UINT IsDlgButtonChecked(int nIDButton) const;

??????返回复选框或单选按钮的选定状态。返回值 0 表示按钮未被选中,1 表示按钮被选中,2 表示按钮处于不确定状态(仅适用于复选框)。

?????? void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);

??????用于选择组中的单选按钮。参数nIDFirstButton指定组中第一个按钮的ID,nIDLastButton指定组中最后一个按钮的ID,nIDCheckButton指定要选择的按钮的ID。

?????? int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);

??????用于获取一组单选按钮中选定按钮的 ID。参数nIDFirstButton指定组中第一个按钮的ID,nIDLastButton指定组中最后一个按钮的ID。

??????另外,CWnd类的成员函数GetWindowText()、SetWindowText()等也可以用来获取或设置按钮中显示的文本。

??????这是按钮控件Button、Radio Button、Check Box的使用的基本介绍。下一节,季培米将举例演示各种按钮控件的使用。希望大家能够继续关注。

转载自:http://www.sychzs.cn/software/182.html

相关文章