MFC主窗口出现之前弹出子窗口与子窗口交互问题
2015-05-12 18:30
197 查看
MFC主窗口出现之前弹出子窗口与子窗口交互问题
作者:褚湘鸣 转载需注明出处
2. 该子窗口可以自定义一些数据域进行操作
3. 应用场景:app的hello界面,初始化等,本例中是在子窗口中选择身份,在主程序中展现出来
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;
}
作者:褚湘鸣 转载需注明出处
平台
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;
}
相关文章推荐
- 用MFC编写的程序在别人电脑上显示时窗口界面出现问题
- C#写的ActiveX弹出窗口在Delphi程序中的应用时出现了问题。
- 解决模态窗体中出现服务器端交互就弹出新窗口的方案
- 关于layer.js 弹出框表单提交关闭父窗口出现表单提交失效的问题
- 解决模态窗体中出现服务器端交互就弹出新窗口的方案
- C#写的ActiveX弹出窗口在Delphi程序中的应用时出现了问题。
- 解决模态窗体中出现服务器端交互就弹出新窗口的方案
- [MFC]解决单文档创建Dock窗口出现DockPane()未定义问题
- (MFC)关于点击窗口1的button弹出对话框2,关闭对话框2,需要点击两次对话框1的button才能弹出对话框2的问题
- 解决弹出的窗口window.open会被浏览器阻止的问题(自定义open方法)
- MFC采用MSComm控件通信时,出现error LNK2001:无法解析的外部符号问题的解决方法
- MFC创建右键弹出菜单,运行点击右键后出现系统崩溃
- window.showmodaldialog弹出新窗口问题解决
- 解决JavaScript页面刷新与弹出窗口问题
- MFC中,如何获得对话框控件相对于父窗口(对话框窗口)的位置 及Invalidate(TRUE)的闪屏问题
- Extjs4.2中Controller重复init,init2次引起点击事件弹出两个窗口的问题
- MFC 简单的用户登录界面(在主程序窗口之前)
- Xshell登录进入CentOS 6.5系统后,Python交互模式和数据库模式下,出现乱码的问题及解决方法
- VC++引用MFC DLL出现的问题
- 【交互】MFC窗口位置分析