views:

189

answers:

1

Environment: Visual Studio 2008, Visual Studio Feature Pack, MFC Dialog App, Windows XP, New Common Controls.

I'm having a problem with a list control that happens to be on a tab control.

To reproduce the problem simply create a dialog based app. Place a tab control on that dialog, then put a list control onto that tab control. You don't need to add any code to the project. Just build and run. Set the focus to the list view and then either minimize the dialog or bring another window in front of it.

Now bring the dialog back to the foreground, the list will not draw itself correctly.

One thing I have tried is handle the set focus event for the list control, but left it with an empty method body, ie...

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

Then the redraw problem goes away, however now you can not select items within the list. Uncommenting the call to Default makes the problem come back.

If I move the list off of the tab the problem goes away. If I set the focus to another control on the tab or dialog, the problem goes away. This is a weird one.

In fact, if you watch closely you can see the list drawing itself and then being obscured by the tab control.

A: 

I know it's late but I had them same problem today. You need to set ListView's parent to Tab control.

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);

Note parent window handler for hWndList: hWndTab. Or you can use SetParent.

AndreMoreira