C++ MFC 为 CTabCtrl 中的每个选项卡附加不同的对话框
Posted
技术标签:
【中文标题】C++ MFC 为 CTabCtrl 中的每个选项卡附加不同的对话框【英文标题】:C++ MFC Attach different dialogs for each tab in CTabCtrl 【发布时间】:2018-08-09 14:45:09 【问题描述】:我正在处理一个小项目。它有多个对话框,所以我想要做的是有 1 个主窗口,其中有多个选项卡。我希望每个选项卡代表不同的对话框。现在我有: 带有 CTabCtrl 的对话框按我的预期打开,并且我附加了 3 个选项卡,当我按下(例如)选项卡 1 时,它会创建一个我想要的 PopUpDialog 的新无模式实例,它出现在我想要的位置。都好。但是,如果我移动我的主窗口,我的 PopUpDialog(无边界)会停留在他一开始弹出的位置。似乎我的对话框的“生成”位置映射到我的 CTabCtrl 对话框,但它没有附加到它。我想我需要把它变成一个子类或类似的东西。我是 MFC 和编程的新手。过去 2 天我一直在寻找答案,但许多链接已被删除,因为它们太旧了。这是我正在做的一个小代码示例:
void CTabCtrlDialog::OnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
CDialogIwantToPopUp *m_Page;
m_Page = new CDialogIwantToPopUp();
m_Page->Create(IDD_POPUP_DIALOG, m_tabTest.GetWindow(IDD_POPUP_DIALOG));
m_Page->ShowWindow(SW_SHOW);
这是一个负责点击任何选项卡事件的函数(在我的对话框中包含选项卡控件)。
【问题讨论】:
这似乎是***.com/questions/2718855/…的副本 您应该为选项卡控件创建子对话框,而不是弹出对话框。它们必须手动定位在选项卡控件内。不要在每次选择选项卡时创建一个对话框。在OnInitDialog
中创建所有子对话框并将它们放在正确的位置。然后显示/隐藏响应OnSelchangeTab
【参考方案1】:
我发现在这种情况下使用属性表最容易,但如果这不适合您,您需要确保每个页面都具有 DS_CHILD 样式(样式:资源编辑器属性列表中的子级)。
创建页面时,其父窗口应该是“this”,而不是您使用 GetWindow() 所做的。
【讨论】:
非常感谢!!这正是我一直在寻找的。span>以上是关于C++ MFC 为 CTabCtrl 中的每个选项卡附加不同的对话框的主要内容,如果未能解决你的问题,请参考以下文章