在标签控件中放入对话框,且对话框里是列表

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34130311/article/details/73770233

背景:公司要求将相关信息显示在列表中,且利用标签控件来进行切换。


问题描述:之前是将相关列表的初始化是放在对话框的OnInitDialog()函数中,且保证了标签控件的切换没有问题。但是在切换的过程中,当焦点不在标签项,点击其它标签项再切换到原标签项时,原标签项中并不能显示出列表,而且当把焦点置于标签项后再重新切换到它时,又会出现。总之是一个很奇怪的问题,花了我好几天时间。


尝试过程:1.觉得是刷新的问题,相继用了invalidate函数和update函数,然而并没有什么卵用。该出现的问题还是会出现;

     2.后来网上搜索动态创建控件,有种说法是将控件的初始化放在OnPaint函数里,让客户区去重绘。我也试着在OnPaint函数里进行控件的初始化,结果不管如何切 换标签控件,都可以显示列表。但是随后就发现了每切换一次,标签控件里就会对列表中的项进行一次重绘,结果造成了列表里有很多重复的项。还是没有成功解 决;

问题分析:

后来问领导,说列表控件的初始化放在OnPaint函数里思路就是错的,还是应该放在OnInitDialog()函数里。我将原先的情况进行了反映,才找到了问题所在:

主对话框中的OnInitDialog()有以下代码:

m_tab.InsertItem(0,"影像数据显示表");
m_tab.InsertItem(1,"对比数据显示表");
m_tab.InsertItem(2,"结果数据显示表");
//获取Tab空间中央区域
CRect rect,rt;
m_tab.GetClientRect(rect);
rect.top += 20;

//在Tab空间的中央创建三个子页窗口
m_ima.Create(IDD_IMADA_DLG,
this);
m_ima.MoveWindow(rect);

其中CImaDlg m_ima,然后m_ima中会有列表控件。

因为m_ima是放在标签控件中的,所以其父窗口是标签控件,而不是主对话框。也就是说Create()函数中的this是错误的。

解决方案:

将代码修改为:m_ima.Create(IDD_IMADA_DLG,&m_tab);  


猜你喜欢

转载自blog.csdn.net/qq_34130311/article/details/73770233