在编程时常常需要添加辅助对话框,在这个辅助的对话框中设置某些属性值然后传给主程序。这类对话框或称为选项对话框,允许用户通过设置一些选项来改变软件的的某些行为或特性。例如:
1.向扫雷游戏中自定义界面中设置界面的行数,列数和雷数,并且将这三个设定的值传递到View类中(正向:数值传递由副界面到主界面);
2.其他需要设定数值在主界面发挥作用的实例;
下面还是以一个实例的形式介绍一下选项对话框向主对话框中数值传递的过程。以扫雷程序中自定义界面中的三个参数:行数,列数和雷数为例做一个简要的介绍。具体操作如下(以SDI为例):
(1)打开工程----资源视图----右键添加资源----Dialog
(2)在Dialog下找到新添加的对话框---右键---属性,编辑对话框的名称和ID
(3)打开工具栏,向这个新添加的对话框中添加三个静态文本控件和三个编辑框控件,
如下图所示:
(4)在给控件关联变量之前还得创建这个对话框对应的类。操作为:双击这个对话框空白部分,根据类导向的提示创建对应的类classCSelfDefineDlg
(5)给这三个编辑框关联对应的成员变量
编辑对应的名称和ID:如下表所示:
宽度:IDC_LEIQUWIDTH
关联的成员变量:UINT m_uiMineAreaColCount;
高度:IDC_LEIQU_HEIGHT
关联的成员变量:UINT m_uiMineAreaRowCount;
雷数:IDC_LEIQU_MINENUM
关联的成员变量:UINT m_uiMineNum;
注意:这里第4步必须在第5步之前,负责这些变量无法通过右键关联到类CSelfDefineDlg中。
这样选项对话框中的操作已完成,下一步就是将这三个值传递到主界面(此处为对应的View类中)
在View类中的操作步骤如下:
(1)在头文件中添加三个成员变量,类型和设置选项对话框中一致。
int m_ColCount;//雷区列数
int m_RowCount;//雷区行数
int m_iMineNum; //雷数
(2)在传递这三个参数值的消息响应函数中添加下面的代码,这里需要注意的是,要在View类的源文件中添加刚才的那个设置项窗口类的头文件,这里是:
//自定义扫雷窗口
#include "SelfDefineDlg.h"
传递这三个参数值的消息响应函数是在菜单命令“自定义”中添加的,函数如下:
void CMineSweepingView::OnGameSelfdefine()
{
CSelfDefineDlg dlg;
if(IDOK == dlg.DoModal())
{
m_RowCount=dlg.m_uiMineAreaRowCount;
m_ColCount=dlg.m_uiMineAreaColCount;
m_iLeftMineNum=dlg.m_uiMineNum;
}
注:这个函数中只添加了数值传递的部分实现代码,函数中具体的控制还得根据具体的情况添加相应的代码。
以上就是MFC中副窗口向主窗口数值传递的一个过程。
关于在扫雷英雄榜界面中,显示的最高纪录是View类传递给这个扫雷英雄榜界面,这只是一个逆向的过程,即
dlg.m_uiMineAreaRowCount= m_RowCount;
dlg.m_uiMineAreaColCount= m_ColCount;
dlg.m_uiMineNum = m_iLeftMineNum;
道理是一样的。