【MFC】 问题:Tab控件内删除首个标签页,剩余的标签页变为空白?(在同一个位置同时ShowWindow(SW_SHOW)两个界面的问题)

问题描述:

mfc编程时,重写ctabctrl类。在实现动态增加删除界面功能时,发现当tab控件内有加载入两个tab界面,当删除tab1时,留下的另一个tab2标签页会变空白。

现象如下:

同时添加“666”和“667”两个tab页,并显示“667”tab页。

然后删除“666”这个tab页,“667”这个标签页则会变成空白。重新切换上层页面,或是wnd消息触发,会逐步加载出界面。

其实这个问题产生的根本原因是:在同一个位置同时ShowWindow(SW_SHOW)两个界面!

因为我是重写了tabctrl类,所以正常两个tab页面的互换我也重新设计,正常情况下就是可以通过:

pDlg1->ShowWindow(SW_HIDE)

pDlg2->ShowWindow(SW_SHOW)

实现切换。

但是这边造成这个bug的原因,是我再删除tab1时,没有先SW_HIDE。所以在之后流程的执行中,我即使SW_SHOW 了 tab2页面,也是空白页面。

在MFC内,如果再同一个位置同时ShowWindow(SW_SHOW)两个页面,从对话框上看实际上只会显示最后SHOW的界面,然后通过wnd消息来触发两个界面的变化。

比如说:

tab1和tab2同时SHOW,对话框会显示的是tab2的界面,然后只有tab1的消息触发后,对话框才会切换显示为tab1的界面。

回到这个问题,我再没有事先HIDE tab1界面的情况下,SHOW了tab2页面,之后因为删除的原因,我会删除tab1界面,所以就会导致出现空白的页面出现。这时如果你切换对话框或者有属于tab2的wnd消息进来,才会显示出tab2界面。

解决方法也很简单:删除前先HIDE tab1界面即可。

参考资源链接:[MFC Tab控件实现多页面对话框的步骤详解](https://wenku.csdn.net/doc/3b2hp0xg3v?utm_source=wenku_answer2doc_content) 为了构建一个多页面对话框并处理页面切换的消息通知,你可能需要参考《MFC Tab控件实现多页面对话框的步骤详解》。这本书将指导你如何在MFC框架中通过CTabCtrl控件实现复杂的用户界面。 首先,你需要在资源编辑器中向对话框中添加一个CTabCtrl控件,并为其创建一个成员变量,例如m_tabctrl。通过调用CTabCtrl的成员函数,如Create(),来初始化控件。随后,创建多个子对话框类,每个类对应一个页面。 在主对话框类的OnInitDialog()函数中,创建并初始化这些子对话框对象,然后使用CTabCtrl的InsertItem()函数来添加对应的标签项。接着,使用SetWindowPos()函数来安排每个子对话框窗口的位置,并通过ShowWindow()函数控制子对话框的显示与隐藏。 页面切换时的通知可以通过处理TCN_SELCHANGE消息来实现。在你的对话框类中,添加一个消息映射宏ON_NOTIFY(),用来映射TCN_SELCHANGE到你的消息处理函数。然后,在该函数中,你可以使用GetCurSel()来获取当前选中的标签项索引,并根据索引显示对应的子对话框,隐藏其他页面。 示例代码如下: (示例代码、步骤说明、代码详解,此处略) 通过上述步骤,你可以在MFC应用程序中创建一个多页面对话框,并在用户切换标签时接收到通知,进而根据需要更新界面。更多关于如何处理Tab控件中的页面内容和交互的细节,你可以查阅《MFC Tab控件实现多页面对话框的步骤详解》一书。这本书不仅提供了实现这一功能的详细步骤,还包括了其他高级用法和最佳实践,有助于你在MFC开发中更深入地理解和运用Tab控件。 参考资源链接:[MFC Tab控件实现多页面对话框的步骤详解](https://wenku.csdn.net/doc/3b2hp0xg3v?utm_source=wenku_answer2doc_content)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值