MFC对话框与对话框之间的参数传递实例.docx

上传人:牧羊曲112 文档编号:3161443 上传时间:2023-03-11 格式:DOCX 页数:4 大小:37.92KB
返回 下载 相关 举报
MFC对话框与对话框之间的参数传递实例.docx_第1页
第1页 / 共4页
MFC对话框与对话框之间的参数传递实例.docx_第2页
第2页 / 共4页
MFC对话框与对话框之间的参数传递实例.docx_第3页
第3页 / 共4页
MFC对话框与对话框之间的参数传递实例.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《MFC对话框与对话框之间的参数传递实例.docx》由会员分享,可在线阅读,更多相关《MFC对话框与对话框之间的参数传递实例.docx(4页珍藏版)》请在三一办公上搜索。

1、MFC对话框与对话框之间的参数传递实例MFC对话框与对话框之间的参数传递实例 基于MFC AppWizard (exe)的基本对话框应用程序中的对话框与对话框中的参数传递。实现当单击对话框A中的一个按钮控件时,对话框B中的一个按钮处于不可用状态,再单击一下,则变为可用。(要实现这种功能,关键在于使得对话框A中可以找到指向对话框B的指针,这样才能找到对应的按钮) 步骤: 1. 新建-工程- MFC AppWizard (exe)-工程名“TMTD”-应用程序类型:基本对话框;ClassWizard步骤选项均为缺省,完成。 2. 删除静态控件“TODO: 在这里设置对话控制。”;在对话框资源上从工

2、具箱中添加上一个Tab Control 控件(ID: IDC_TAB) 3. 使用ClassWizard-Member Variable为这个控件添加一个控制变量,(Member valiable name: m_TabCtrl; Category: Control; Valiable type: TabCtrl)。 4. 创建两个新的对话框资源(ID: IDD_DIALOGA; ID: IDD_DIALOGB ),其属性作如下修改: 样式:重叠;边框:无。 5. 从这两个对话框模板生成两个新的对话框类(CDlgChildA; CDlgChildB)。 6. 在CTMTDDlg (TMTDDl

3、g.h)中添加头文件: #include DlgChildA.h #include DlgChildB.h 7. 在主对话框(CTMTDDlg.h )中为新添加进来的两个对话框类增加两个成员变量: Public: CDlgChildA m_Tab1; Public: CDlgChildB m_Tab2; 8. 在主对话框(CTMTDDlg.h )的OnInitDialog函数中添加如下类似的代码: / TODO: Add extra initialization here TCITEM item; item.mask = TCIF_TEXT; item.pszText = 第一页; m_Tab

4、Ctrl.InsertItem (0, &item); item.pszText =第二页; m_TabCtrl.InsertItem (1, &item); m_Tab1.Create (IDD_DIALOGA, &m_TabCtrl); m_Tab2.Create (IDD_DIALOGB, &m_TabCtrl); m_Tab1.m_MyDlg2 = &m_Tab2; CRect r; m_TabCtrl.GetClientRect (&r); m_Tab1.SetWindowPos(NULL, 10, 30, r.right-20, r.bottom-40, SWP_SHOWWINDO

5、W); m_Tab2.SetWindowPos(NULL, 10, r.bottom-40, r.right-20, r.bottom-40, SWP_HIDEWINDOW); 说明: InsertIte 函数的调用是为了给标签控件增加两个标签页面,文本是标题。 SetWindowPos 函数设置这两个对话框在显示屏幕中顺序中的位置,显示或隐藏状态。 9. 通过ClassWizard-MessageMaps,在主对话中为标签控件添加一个标签选择改变的控件通知消息(Class name: CTMTDDlg; Objects IDs: IDC_TAB ; Messages: TCN_SELCHAN

6、GE)。以便在用户选择标签时通知主对话框。在主对话框的编辑界面右击标签控件,选择添加一个事件可以完成这个操作。添加代码如下: void CTMTDDlg:OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) CRect r; m_TabCtrl.GetClientRect (&r); switch(m_TabCtrl.GetCurSel) *pResult = 0; 10. 在对话框A上添加按钮(ID: IDC_BTN_A, 标题: BtnDlgA;);在对话框B上添加按钮(ID: IDC_BTN_B, 标题: BtnDlgB;) 11. 在CDlgC

7、hildA (DlgChildA.h)中添加一个对话框指针变量: Public: CDlgChildB* m_MyDlg2; 12. 在CDlgChildA (DlgChildA.h)中添加头文件: #include DlgChildB.h 13. 找到主对话框(CTMTDDlg.h )的OnInitDialog函数添加以下代码:(如上面红字部分) m_Tab1.m_MyDlg2 = &m_Tab2; 注意: 这里要添加的一行代码必须放在m_Tab1和m_Tab2实例化之后,即Create函数之后 14. 通过ClassWizard-MessageMaps,在对话框A中为按钮控件添加一个按钮按

8、下的控件通知消息(Class name: CDlgChildA; Objects IDs: IDC_BTN_A ; Messages: BN_CLICKED)。以便在用户当单击对话框A中的一个按钮控件时,对话框B中的一个按钮处于不可用状态,再单击一下,则变为可用。添加代码如下: void CDlgChildA:OnBtnA if ( m_MyDlg2-GetDlgItem(IDC_BTN_B)-IsWindowEnabled ) m_MyDlg2-GetDlgItem(IDC_BTN_B)-EnableWindow(0); m_MyDlg2-GetDlgItem(IDC_BTN_B)-Enab

9、leWindow(1); else case 0: m_Tab1.SetWindowPos(NULL, 10, 30, r.right-20, r.bottom-40, SWP_SHOWWINDOW); m_Tab2.SetWindowPos(NULL, 10, r.bottom-40, r.right-20, r.bottom-40, SWP_HIDEWINDOW); break; case 1: m_Tab1.SetWindowPos(NULL, 10, 30, r.right-20, r.bottom-40, SWP_HIDEWINDOW); m_Tab2.SetWindowPos(NULL, 10, r.bottom-40, r.right-20, r.bottom-40, SWP_SHOWWINDOW); break; 15. 这里最开心的事情是这里没有用到全局变量。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号