如何销毁子对话框

loyoo2540598 2010-12-10 04:33:16
我现在CADialog 的 :OnInitDialog()中创建CBDialog
代码如下:
CBDialog *pDlgAsr ;
m_pDlgAsr = new CDlgAsr;
m_pDlgAsr->Create( IDD_DLG_ASR, this );
m_pDlgAsr->ShowWindow(SW_SHOW);
CBDialog是Child样式,嵌入在CADialog
现在如何把CBDialog 销毁掉,
在线等待
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
VC天下 2010-12-11
  • 打赏
  • 举报
回复
DestroyWindow,查下它的用法。
忧郁马赛克 2010-12-10
  • 打赏
  • 举报
回复
看看~
tigerMayDo 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]
m_pDlgAsr->DestroyWindow();
delete m_pDlgAsr;
[/Quote]
upup
lyingbo 2010-12-10
  • 打赏
  • 举报
回复
在CADialog的析构函数里面加代码:

m_pDlgAsr->DestroyWindow();
delete m_pDlgAsr;
m_pDlgAsr = NULL;
mazm_yanzhu 2010-12-10
  • 打赏
  • 举报
回复
对啊,改为成员变量在CADialog 的析构函数中销毁
loyoo2540598 2010-12-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]
m_pDlgAsr->DestroyWindow();
delete m_pDlgAsr;
[/Quote]
谢谢 ouyh12345,
问题已解决,有个疑问是,CBDialog和CADialog,没有分离,
直接DestroyWindow();怎么不会出问题啊??
快乐鹦鹉 2010-12-10
  • 打赏
  • 举报
回复
如果这个m_pDlgAsr 是临时变量,最好改成成员变量。
快乐鹦鹉 2010-12-10
  • 打赏
  • 举报
回复
代码有问题啊:
CBDialog *pDlgAsr ;
m_pDlgAsr = new CDlgAsr;
这两个指针不是一个玩意啊。
ouyh12345 2010-12-10
  • 打赏
  • 举报
回复
m_pDlgAsr->DestroyWindow();
delete m_pDlgAsr;
1. 创建一个基于对话框的应用程序。并增加如图所示控件;分别为3个进度条控件关联三个进度条类型的变量;并在对话框的初始化函数中,设定进度条的范围;为编辑框关联一个整型的变量;为12个按钮添加消息处理函数; 2. 定义结构体:用做线程函数的参数传递 typedef struct Threadinfo{ CProgressCtrl *progress;//进度条对象 int speed; //进度条速度 int pos; //进度条位置 } thread,*lpthread; 3. 为对话框增加三个句柄,用于标识各个线程; HANDLE hThread1; //线程1线程句柄 HANDLE hThread2; //线程2线程句柄 HANDLE hThread3; //线程3线程句柄 在增加三个结构体类型的变量,用做线程函数的参数传递; HANDLE hThread1; //线程1线程句柄 HANDLE hThread2; //线程2线程句柄 HANDLE hThread3; //线程3线程句柄 4. 新增一个静态的全局变量,用于记录所有线程的状态:static int GlobalVar=10000; 5. 声明并编写线程函数,注意只能有一个参数,且函数的返回值类型也是固定的;函数名可以自定义; DWORD WINAPI ThreadFun(LPVOID pthread);//线程入口函数 6. 在启动按钮的消息处理函数中编写如下代码: thread1.progress=&m_progress1;//进度条对象 thread1.speed=100;//速度 thread1.pos=0;//初始位置 hThread1=CreateThread(NULL,0,ThreadFun,&thread1;,0,0);//创建并开始线程 if (!hThread1) { MessageBox("创建线程失败"); } 7. 编写线程函数(一般是一个死循环,或者需要花费时间很长的算法!否者就失去了多线程的意义) DWORD WINAPI ThreadFun(LPVOID pthread) //线程入口函数 { lpthread temp=(lpthread)pthread;//参数强制转换为结构体类型 temp->progress->SetPos(temp->pos); //设置被传递过来的进度条的位置 while(temp->posspeed); /设置速度 temp->pos++; //增加进度 temp->progress->SetPos(temp->pos); //设置进度条的新位置 GlobalVar--; if(temp->pos==20) { temp->pos=0; //进度条满则归0 } } return true; } 8. 在挂起按钮函数中,编写如下代码: if(SuspendThread(hThread1)==0xFFFFFFFF) { MessageBox("挂起失败!进程可能已经死亡或未创建!"); return; } 9. 在执行按钮函数中,编写如下代码: if(ResumeThread(hThread1)==0xFFFFFFFF) { MessageBox("执行失败!进程可能已经死亡或未创建!"); return; } 10. 在停止按钮函数中,编写如下代码: if(TerminateThread(hThread1,0))//前些终止线程 { CloseHandle(hThread1);//销毁线程句柄 } else { MessageBox("终止进程失败!"); } 11. 为应用程序添加WM_TIMER消息,实时更新全局变量的值到编辑框;
No.4 简单的MFC多对话框演示程序 “MultiDialog” 演示如何在工程中拥有多个对话框,及如何在一个对话框中调用另一个对话框。 重点:1、多个对话框类的建立;2、对话框的模式(Modal)调用方法;3、Spin控件的使用。 新建一个基于对话框的MFC工程, 通过菜单"Insert>>Resource"打开添加资源对话框, 在其中选择Dialog后点击New创建一个新的对话框 按Ctrl+W打开ClassWizard,系统会提示刚才创建了一个新的对话框资源,是否建立对应的类, 选择建立,然后在New Class窗口中Class Name栏输入它的名称:CSubClass1, 确定后系统会自动生成SubClass1.h和SubClass1.cpp并加入工程中,其中有已经创建好的CSubClass1的类的基本代码。 把这个对话框的Caption属性改为“难度选择”,在它上面画三个Radio“简单”、“标准”、“困难”, 并建立相关联的变量m_Option1。(要注意的是在ClassWizard中注意Class Name中应该选CSubClass1而不是之前的主对话框类) 按照相同方法建立第二个新对话框,类名“CSubClass2”,Caption为“关卡选择”。 在上面画一个Edit和一个Spin,注意先画Edit后画Spin,将Spin的Auto buddy和Set buddy integer勾上。 按Ctrl+W打开ClassWizard,为Edit建立关联变量,不过注意是int型而不是CString型, 也为Spin建立关联变量m_Spin1,注意这次是Control型变量CSpinButtonCtrl。 下面为这两个对话框添加代码。 双击“难度选择”对话框的OK按钮,建立对话框的OnOK映射。 在其中加入(在CDialog::OnOK();之前): UpdateData(TRUE); if ((m_Option1>2) ||(m_Option1<0)) { MessageBox("错误的选择!","提示",MB_OK); return; } 下面对“关卡选择”对话框添加初始化代码, 由于关卡的有效值只有1到6,因此需要在初始化时设置Spin控件的有效值范围。 按Ctrl+W打开ClassWizard,在左侧列表选择这个对话框类CSubDialog2, 在右侧列表中选择WM_INITDIALOG,点击右边的“Add Function...”按钮, 接着点击右边的“Edit Code”按钮,在其中中加入(在CDialog::OnInitDialog()那句之后,在return TRUE那句之前): m_Spin1.SetRange(1,6); m_Text1=1; m_Spin1.SetPos(1); 其中CSpinButtonCtrl::SetRange()函数的作用是设置和他关联的Spin控件的范围,两个参数分别是下界和上界。 而CSpinButtonCtrl::SetPos()是设定Spin的当前位置。 两个新的对话框都已建立完毕,下来是如何在主对话框中使用的问题。 首先,两个新对话框都有各自的类,分别在SubDialog1.h和SubDialog2.h中有定义。(类的细节则在对应的cpp中定义) 因此,主对话框想要调用这两个新对话框,需要先包含这两个头文件, 在你要使用的地方(本例是MultiDialogDlg.cpp中)文件前面加上 #include "SubDialog1.h" #include "SubDialog2.h" 然后在想要调用的地方就可以使用了。 本例中,首先为主窗口的两个Edit建立CString型关联变量m_Text1和m_Text2, 然后在两个按钮的消息映射函数中分别加入: CSubDialog1 dialog1; //定义CSubDialog1型对话框的一个新对象 dialog1.DoModal(); //使用“模式”调用,显示对话框 m_Text1.Format("%d",dialog1.m_Option1); //此句在上面对话框没有关闭前不会执行到 UpdateData(FALSE); 和 CSubDialog2 dialog1; dialog1.DoModal(); m_Text2.Format("%d",dialog1.m_Text1); UpdateData(FALSE); 其中第一句均为定义对话框新实例的语句,定义一个你想要的类型的对话框。 第二句是通过调用CDialog::DoModal()方法,来显示这个对话框,并进入“模式”(Modal)状态 在“模式”状态,当对话框没有关闭之前,调用它的父对话框不能被响应, 并且其语句执行会停留在刚才的DoModal语句上等待,直到对话框关闭才接着执行下一个语句。 第三第四句将对话框得到的数据(即类的成员变量)显示在父对话框的Edit上。 四句执行完后退出该函数,这时刚才定义的CSubDialog1等对话框类变量被销毁,因此创建的话框也被销毁
目 录 译者序 前言 第一部分 基础知识 第1章 窗口 2 1.1 窗口和API环境 2 1.1.1 三种类型窗口 2 1.1.2 客户区和非客户区 3 1.2 窗口和MFC环境 4 1.3 怎样应用MFC创建一个窗口 5 1.4 怎样使用MFC销毁一个窗口 9 1.4.1 捆绑到一个已有的窗口 9 1.4.2 窗口类 10 1.4.3 窗口进程 10 1.5 怎样使用MFC创建一个窗口类 11 1.5.1 使用AfxRegisterWndClass () 函数注册一个窗口类 11 1.5.2 使用AfxRegisterClass ()函数 创建一个窗口类 12 1.6 怎样销毁一个MFC窗口类 14 1.7 厂商安装的窗口类 14 1.8 其他类型窗口 15 1.9 桌面窗口 16 1.10 小结 16 第2章 类 18 2.1 基类 18 2.1.1 CObject 18 2.1.2 CCmdTarget 19 2.1.3 CWnd 19 2.2 应用程序、框架、文档和视图类 19 2.2.1 CWinApp(O/C/W) 20 2.2.2 CView (O/C/W) 21 2.3 其他用户界面类 22 2.3.1 通用控件类 23 2.3.2 菜单类 23 2.3.3 对话框类 24 2.3.4 控制条类 24 2.3.5 属性类 25 2.4 绘图类 25 2.4.1 设备环境类 25 2.4.2 图形对象类 25 2.5 文件类 26 2.6 数据库类 26 2.6.1 ODBC类 26 2.6.2 DAO类 27 2.7 数据集类 27 2.8 其他数据类 27 2.9 通信类 28 2.10 其他类 29 2.11 小结 31 第3章 消息处理 32 3.1 发送或寄送一个消息 32 3.1.1 发送一个消息 32 3.1.2 寄送一个消息 32 3.1.3 发送一个消息与寄送一个消息 的比较 32 3.2 怎样使用MFC发送一个消息 33 3.3 怎样用MFC寄送一个消息 33 3.4 三种类型的消息 34 3.4.1 窗口消息 34 3.4.2 命令消息 34 3.4.3 控件通知 34 3.5 MFC怎样接收一个寄送的消息 36 3.6 MFC怎样处理一个接收到的消息 36 3.7 处理用户界面的对象 44 3.8 创建自定义窗口消息 45 3.8.1 静态分配的窗口消息 45 3.8.2 动态分配的窗口消息 46 3.9 重定向消息 47 3.9.1 分类和超分类 47 3.9.2 用MFC分类窗口 48 3.9.3 重载OnCmdMsg ( ) 49 3.9.4 使用SetWindowsHookEx ( ) 49 3.9.5 使用SetCapture ( ) 49 3.9.6 专有的消息泵 50 3.10 小结 50 第4章 绘图 51 4.1 设备环境 51 4.2 在MFC环境中创建一个设备环境 52 4.2.1 屏幕 52 4.2.2 打印机 53 4.2.3 内存 54 4.2.4 信息 54 4.3 绘图例程 55 4.3.1 画点 55 4.3.2 画线 55 4.3.3 画形状 55 4.3.4 形状填充和翻转 55 4.3.5 滚动 56 4.3.6 绘制文本 56 4.3.7 绘制位图和图标 56 4.4 绘图属性 56 4.4.1 设备环境属性 57 4.4.2 画线属性 58 4.4.3 形状填充属性 58 4.4.4 文本绘制属性 58 4.4.5 映像模式 59 4.4.6 调色板属性 62 4.4.7 混合属性 62 4.4.8 剪裁属性 63 4.4.9 位图绘制属性 64 4.5 元文件和路径 65 4.5.1 元文件 65 4.5.2 路径 66 4.6 颜色和调色板 66 4.6.1 抖动色 67 4.6.2 未经抖动色 67 4.6.3 系统调色板 67 4.6.4 使用系统调色板 68 4.6.5 动画色 71 4.7 控制什么时候在哪里绘图 71 4.7.1 处理WM_PAINT 71 4.7.2 只绘制被无效化的区域 72 4.7.3 处理WM_DRAWITEM 72 4.7.4 在其他时间绘图 73 4.8 小结 74 第二部分 用户界面实例 第5章 应用程序与环境 76 5.1 例1 规划MFC应用程序 76 5.2 例2 用AppWizard创建一个MFC 应用程序 79 5.3 例3 用ClassWizard创建一个类 83 5.4 例4 初始化应用程序屏幕 84 5.5 例5 保存应用程序屏幕 86 5.6 例6 处理命令行选项 88 5.7 例7 动态改变应用程序图标 91 5.8 例8 提示用户优先选项 93 5.9 例9 保存和恢复用户优先选项 97 5.10 例10 终止应用程序 100 5.11 例11 创建一个启动窗口 101 第6章 菜单 107 6.1 例12 使用菜单编辑器 107 6.2 例13 添加一个菜单命令处理函数 109 6.3 例14 根据当前可视文档动态改 变菜单 110 6.4 例15 启用和禁用菜单命令 111 6.5 例16 复选标记菜单命令 112 6.6 例17 单选标记菜单命令 113 6.7 例18 动态修改菜单 114 6.8 例19 动态修改系统菜单 116 6.9 例20 触发一个菜单命令 117 6.10 例21 创建弹出式菜单 117 第7章 工具栏和状态栏 120 7.1 例22 使用工具栏编辑器 120 7.2 例23 启用和禁用工具栏按钮 122 7.3 例24 为工具栏按钮添加字 123 7.4 例25 非标准工具栏大小 128 7.5 例26 保持工具栏按钮按下 129 7.6 例27 保持工具栏按钮组中 一个按钮按下 130 7.7 例28 为工具栏添加非按钮控件 131 7.8 例29 修改应用程序的状态栏 136 7.9 例30 更新状态栏窗格 138 7.10 例31 为状态栏添加其他控件 139 第8章 视图 145 8.1 例32 滚动视图 145 8.2 例33 改变鼠标光标形状 147 8.3 例34 沙漏光标 148 8.4 例35 窗体视图 149 8.5 例36 列表视图 152 8.6 例37 动态分割一个视图 163 第9章 对话框和对话条 166 9.1 例38 使用对话框编辑器 166 9.2 例39 创建一个对话框类 168 9.3 例40 模式对话框 170 9.4 例41 无模式对话框 171 9.5 例42 在无模式对话框的控件间 切换焦点 172 9.6 例43 对话框中的动画 173 9.7 例44 消息框 174 9.8 例45 对话条 176 第10章 控件窗口 182 10.1 例46 在任意位置创建一个控 件窗口 182 10.2 例47 用分类定制一个通用 控件窗口 183 10.3 例48 用超分类定制一个通用 控件窗口 188 10.4 例49 在按钮上放置位图 190 10.5 例50 动态填充一个组合框 192 10.6 例51 排序一个列表控件 194 10.7 例52 分隔线控件 196 第11章 绘图 198 11.1 例53 绘制图形 198 11.2 例54 绘制文本 201 11.3 例55 从任意位置装入一个图 标并绘制 203 11.4 例56 从任意位置装入一个位 图和绘制一个位图 204 11.5 例57 从文件中创建一个位图 206 11.6 例58 创建一个自绘位图 211 第三部分 内部处理实例 第12章 消息 215 12.1 例59 添加消息处理函数或重 载MFC类 216 12.2 例60 添加命令范围消息处理函数 219 12.3 例61 重定向命令消息 221 12.4 例62 创建自己的窗口消息 222 第13章 文件、串行化和数据库 225 13.1 例63 访问二进制文件 225 13.2 例64 访问标准I/O文件 227 13.3 例65 访问内存文件 228 13.4 例66 在数据类中实现串行化 229 13.5 例67 串行化SDI或MDI文档 235 13.6 例68 按要求串行化 240 13.7 例69 透明地更新串行化的文档 242 13.8 例70 串行化多态类 246 13.9 例71 串行化数据集 248 13.10 例72 访问ODBC数据库 252 13.11 例73 访问DAO数据库 257 第14章 杂类 263 14.1 例74 剪切、拷贝和粘贴文本 数据 263 14.2 例75 剪切、拷贝、粘贴多信 息文本数据 268 14.3 例76 剪切、拷贝和粘贴二进制 数据 273 14.4 例77 数组函数 280 14.5 例78 列表函数 281 14.6 例79 映像函数 283 14.7 例80 系统键盘输入 285 14.8 例81 时间 288 第四部分 打包实例 第15章 库 291 15.1 例82 静态链接C/C++库 291 15.2 例83 动态链接C/C++库 295 15.3 例84 动态链接MFC扩展类库 300 15.4 例85 资源库 303 第五部分 附录 附录A 控件窗口风格 305 附录B 消息、控件通知和消息映像宏 323 附录C 访问其他应用程序类 328 附录D 开发中注意事项 330 附录E MFC快速参考指南 339
.版本 2 .支持库 dp1 .支持库 eAPI .程序集 窗口程序集1 .程序集变量 编辑框内容被改变, 整数型 .程序 _关于_被选择 信息框 (“作者:贵州师范学院张超,版本:1.0”, 0, ) .程序 __启动窗口_尺寸被改变 编辑框1.宽度 = _启动窗口.宽度 编辑框1.高度 = _启动窗口.高度 .程序 _退出_被选择 _启动窗口.销毁 () .程序 _新建_被选择 .局部变量 信息框按钮, 整数型 .如果 (编辑框内容被改变 = 0) 编辑框1.内容 = “” .否则 信息框按钮 = 信息框 (“超哥提醒:内容被改变过,是否保存?”, 3, “超哥计事本”) .如果 (信息框按钮 = #是钮) _保存_被选择 () .否则 .如果结束 .如果结束 .程序 _编辑框1_内容被改变 编辑框内容被改变 = 1 .程序 _保存_被选择 通用对话框1.类型 = 1 .如果 (通用对话框1.打开 ()) 写到文件 (通用对话框1.文件名, 到字节集 (编辑框1.内容)) 编辑框内容被改变 = 0 .否则 .如果结束 .程序 _打开_被选择 通用对话框1.类型 = 0 .如果 (通用对话框1.打开 ()) 编辑框1.内容 = 到文本 (读入文件 (通用对话框1.文件名)) .否则 .如果结束 .程序 _另存为_被选择 通用对话框1.类型 = 1 .如果 (通用对话框1.打开 ()) 写到文件 (通用对话框1.文件名, 到字节集 (编辑框1.内容)) 编辑框内容被改变 = 0 .否则 .如果结束 .程序 _加密存盘_被选择 .局部变量 拟保存的数据, 字节集 .局部变量 输入的密码, 文本型 .局部变量 i, 整数型 拟保存的数据 = 到字节集 (编辑框1.内容) .如果 (输入框 (“请输入加密密码--务必记住自己设置的密码!”, “密码输入”, , 输入的密码, #输入密码)) 拟保存的数据 = 加密数据 (拟保存的数据, 输入的密码, #RC4算法) .' 计次循环首 (取字节集长度 (拟保存的数据), i) ' 拟保存的数据 [i] = 拟保存的数据 [i] + 到数值 (输入的密码) .' 计次循环尾 () 通用对话框1.类型 = 1 通用对话框1.打开 () 写到文件 (通用对话框1.文件名, 拟保存的数据) 信息框 (“你设置的密码为:” + 输入的密码 + “,” + “请务必记住!”, 0, ) .否则 .如果结束 .程序 _解密读入_被选择 .局部变量 拟读入的数据, 字节集 .局部变量 输入的密码, 文本型 .局部变量 i, 整数型 通用对话框1.类型 = 0 通用对话框1.打开 () 拟读入的数据 = 读入文件 (通用对话框1.文件名) .如果 (输入框 (“请输入加密密码”, “密码输入”, , 输入的密码, #输入密码)) 拟读入的数据 = 解密数据 (拟读入的数据, 输入的密码, #RC4算法) .' 计次循环首 (取字节集长度 (拟读入的数据), i) ' 拟读入的数据 [i] = 拟读入的数据 [i] - 到数值 (输入的密码) .' 计次循环尾 () 编辑框1.内容 = 到文本 (拟读入的数据) .否则 .如果结束 .程序 _复制_被选择 置剪辑板文本 (编辑框1.被选择文本) .程序 _剪切_被选择 置剪辑板文本 (编辑框1.被选择文本) 编辑框1.被选择文本 = “” .程序 _粘贴_被选择 编辑框1.内容 = 取剪辑板文本 () .程序 _打印_被选择 .局部变量 打印信息变量, 打印信息 打印信息变量.纸张方向 = #纵向 打印信息变量.纸张类型 = -1 打印信息变量.纸张宽度 = 2100 打印信息变量.纸张高度 = 2970 打印信息变量.打印份数 = 1 ' 打印信息变量.打印机名称=打印机列表框.取项目文本(打印机列表框.取现行选中项) 打开打印机对话框 (#接口常量.标准打印设置对话框, 打印信息变量) .程序 __启动窗口_可否被关闭, 逻辑型 .局部变量 信息框按钮, 整数型 .如果 (编辑框内容被改变 = 0) _启动窗口.销毁 () .否则 信息框按钮 = 信息框 (“超哥提醒:内容被改变过,并且没有保存,是否保存?”, 3, “超哥计事本”) .判断开始 (信息框按钮 = #是钮) _保存_被选择 () _启动窗口.销毁 () .判断 (信息框按钮 = #否钮) _启动窗口.销毁 () .判断 (信息框按钮 = #取消钮) 返回 (假) .默认 .判断结束 .如果结束

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧