【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界面即可。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/UniverseLin/article/details/116494794

posted @ 2025-03-07 13:21  unicornsir  阅读(47)  评论(0)    收藏  举报