2009-10-06 29 views
0

環境: Visual Studio 2008,Visual Studio功能包,MFC對話框應用程序,Windows XP,新通用控件。列表控件在選項卡控件上的SetFocus重繪錯誤

我遇到了一個列表控件碰巧出現在選項卡控件上的問題。

要重現該問題,只需創建一個基於對話框的應用程序。在該對話框上放置一個選項卡控件,然後將一個列表控件放到該選項卡控件上。您不需要向該項目添加任何代碼。只需構建並運行。將焦點設置到列表視圖,然後最小化對話框或在其前面放置另一個窗口。

現在讓對話框回到前臺,列表將不會正確繪製自己。

有一件事我已經試過是辦理列表控制的設定焦點事件,而是用空的方法體離開它,即...

void CMyListControl::OnSetFocus(CWnd* window) 
{ 
    // Default(); 
} 

然後重繪問題消失,但是現在你無法選擇列表中的項目。取消對默認呼叫的註釋會使問題重新出現。

如果將列表移出標籤,問題就會消失。如果我將焦點設置爲選項卡或對話框中的另一個控件,問題就會消失。這是一個奇怪的。實際上,如果仔細觀察,您可以看到列表圖形本身,然後被選項卡控件遮住。

回答

2

我知道這是晚了,但我今天有他們同樣的問題。您需要將ListView的父級設置爲Tab控件。

hWndTab = CreateWindowEx(WS_EX_CLIENTEDGE, WC_TABCONTROL, NULL, 
    WS_CHILD | WS_TABSTOP | WS_VISIBLE, 
    0, 0, 0, 0, hWnd, (HMENU) IDC_TAB, hInstance, NULL); 

hWndList = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL, 
    WS_CHILD | WS_TABSTOP | WS_VISIBLE | LVS_REPORT, 
    0, 0, 0, 0, hWndTab, (HMENU) IDC_LIST, hInstance, NULL); 

注意hWndList的父窗口處理程序:hWndTab。或者你可以使用SetParent。