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

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

我遇到了一个恰好在选项卡控件上的列表控件的问题。

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

现在让对话框回到前台,列表不会正确绘制自己。

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

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

然后重绘问题消失,但是现在您无法选择列表中的项目。 取消对默认呼叫的注释会使问题重新出现。

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

事实上,如果你仔细观察,你可以看到列表画图本身,然后被选项卡控制遮住。


我知道这很晚,但今天我也遇到了同样的问题。 您需要将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。

链接地址: http://www.djcxy.com/p/41191.html

上一篇: List Control SetFocus Redraw Error on a Tab Control

下一篇: SetItemSize and user drawn tab controls