选项卡控件上的列表控件SetFocus重绘错误

时间:2009-10-06 18:50:53

标签: c++ mfc winapi artifacts

环境:Visual Studio 2008,Visual Studio功能包,MFC对话应用,Windows XP,新通用控件。

我遇到了一个恰好位于制表符控件上的列表控件的问题。

要重现问题,只需创建一个基于对话框的应用程序。在该对话框上放置一个选项卡控件,然后将一个列表控件放到该选项卡控件上。您无需向项目添加任何代码。只需构建并运行。将焦点设置到列表视图,然后最小化对话框或在其前面显示另一个窗口。

现在将对话框带回前台,列表将无法正确绘制。

我尝试过的一件事是处理列表控件的set focus事件,但是留下了一个空的方法体,即......

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

然后重绘问题消失,但现在您无法选择列表中的项目。取消注释默认值可以解决问题。

如果我将列表移出选项卡,问题就会消失。如果我将焦点设置到选项卡或对话框上的另一个控件,则问题就会消失。这很奇怪。

事实上,如果仔细观察,您可以看到列表绘图本身,然后被标签控件遮挡。

1 个答案:

答案 0 :(得分: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。