0

环境: Visual Studio 2008、Visual Studio Feature Pack、MFC Dialog App、Windows XP、New Common Controls。

我遇到了恰好位于选项卡控件上的列表控件的问题。

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

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

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

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

然后重绘问题就消失了,但是现在您无法选择列表中的项目。取消注释对 Default 的调用会使问题再次出现。

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

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

4

1 回答 1

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。

于 2010-08-29T16:45:42.633 回答