MFC主窗口出现之前弹出子窗口与子窗口交互问题

来源:互联网 发布:sql字段添加内容 编辑:程序博客网 时间:2024/04/29 19:32

MFC主窗口出现之前弹出子窗口与子窗口交互问题

作者:褚湘鸣 转载需注明出处

平台

Microsoft Visual Studio 2013

工具

MFC App Wizard

实现目标

1.      在MFC主窗口弹出来之前弹出一个子窗口

2.      该子窗口可以自定义一些数据域进行操作

3.      应用场景:app的hello界面,初始化等,本例中是在子窗口中选择身份,在主程序中展现出来

步骤:

1.      利用MFC App Wizard 创建一个但文档对话框模式的app。主窗口类增加一个自定义成员变量,用于接收子窗口中传来的消息。本例中使用的是自定义类Person的对象Hero的数据域Identity(private)

2.      利用Class Wizard 创建一个CDialogEx 的子类,暂且名为NewDialog,NewDialog中增加一个自定义的数据域:m_Identity,用来表示

3.      在资源视图中,利用可视化编程设计NewDialog对话框,如:

4.      点按某个按钮后,把相应的事件写出来:

如双击“领主Lord”,弹出程序,写入:

注:

1.      OnBnClicked*****的意思就是在这个按钮被单击的事件发生后,需要执行的程序

2.      CDialog::OnOK()函数是CDialog类及其子类所代表的(模式)对话框中都必须有的“确定”按钮被单击后执行的程序,属于默认程序。因为本程序中点按后必须关闭现有对话框,所以增加这一句。

3.      LORD是我在另一个头文件中定义的宏,不用管

5.      上述程序写完后(很简单吧),子窗口就实现了如下功能:通过点按某个按钮,使子窗口对象的一个成员变量:m_Identity有了相应的值

6.      接下来,就要实现在主窗口出来之前弹出子窗口。在“主窗口类名.cpp”(本例为MBDlg.cpp)中找到OnInitDialog()函数,添加如下代码:

注:

1.      不是在InitInstance()里加,网上有的教程是错的

2.      帮助大家理清逻辑:在这个地方添加的代码执行的时间,是在主窗口定义之后,显示之前,也就是说此时主窗口的对象(类的实例)已经存在,而这段程序的位置又在这个类的成员函数内部,所以成员变量(对象)Hero也已经存在,可以直接引用;SetDlgItemText()函数也是在主窗口的内部使用,所以不用指定窗口的id(该函数原本有三个参数,第一个是指定窗口的指针,但是现在只用两个就行了)

3.     若想在某一个对话框点了“退出”或者“取消”后就退出全部程序,可以添加如下代码

if(dlg.DoModal()==IDOK){...}

else{  

CDialog::OnCancel();  

return true;

}




0 0
原创粉丝点击