开发者

List Control SetFocus Redraw Error on a Tab Control

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 min开发者_如何学Cimize 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.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜