环境:Visual Studio 2008,Visual Studio功能包,MFC对话应用,Windows XP,新通用控件。
我遇到了一个恰好位于制表符控件上的列表控件的问题。
要重现问题,只需创建一个基于对话框的应用程序。在该对话框上放置一个选项卡控件,然后将一个列表控件放到该选项卡控件上。您无需向项目添加任何代码。只需构建并运行。将焦点设置到列表视图,然后最小化对话框或在其前面显示另一个窗口。
现在将对话框带回前台,列表将无法正确绘制。
我尝试过的一件事是处理列表控件的set focus事件,但是留下了一个空的方法体,即......
void CMyListControl::OnSetFocus(CWnd* window)
{
// Default();
}
然后重绘问题消失,但现在您无法选择列表中的项目。取消注释默认值可以解决问题。
如果我将列表移出选项卡,问题就会消失。如果我将焦点设置到选项卡或对话框上的另一个控件,则问题就会消失。这很奇怪。
事实上,如果仔细观察,您可以看到列表绘图本身,然后被标签控件遮挡。
答案 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。