1. 程式人生 > >在標籤控制元件中放入對話方塊,且對話方塊裡是列表

在標籤控制元件中放入對話方塊,且對話方塊裡是列表

背景:公司要求將相關資訊顯示在列表中,且利用標籤控制元件來進行切換。


問題描述:之前是將相關列表的初始化是放在對話方塊的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);