在標籤控制元件中放入對話方塊,且對話方塊裡是列表
背景:公司要求將相關資訊顯示在列表中,且利用標籤控制元件來進行切換。
問題描述:之前是將相關列表的初始化是放在對話方塊的OnInitDialog()函式中,且保證了標籤控制元件的切換沒有問題。但是在切換的過程中,當焦點不在標籤項,點選其它標籤項再切換到原標籤項時,原標籤項中並不能顯示出列表,而且當把焦點置於標籤項後再重新切換到它時,又會出現。總之是一個很奇怪的問題,花了我好幾天時間。
嘗試過程:1.覺得是重新整理的問題,相繼用了invalidate函式和update函式,然而並沒有什麼卵用。該出現的問題還是會出現;
2.後來網上搜索動態建立控制元件,有種說法是將控制元件的初始化放在OnPaint函式裡,讓客戶區去重繪。我也試著在OnPaint函式裡進行控制元件的初始化,結果不管如何切
問題分析:
後來問領導,說列表控制元件的初始化放在OnPaint函式裡思路就是錯的,還是應該放在OnInitDialog()函式裡。我將原先的情況進行了反映,才找到了問題所在:
主對話方塊中的OnInitDialog()有以下程式碼:
m_tab.InsertItem(0,"影像資料顯示錶");
m_tab.InsertItem(1,"對比資料顯示錶");
m_tab.InsertItem(2,"結果資料顯示錶");
//獲取Tab空間中央區域
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);