2013-03-02 121 views
2

我有创建了两个列表框窗:的Win32窗口风格重叠问题

_objectList = CreateWindow("LISTBOX", NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_SORT, 5, 50, 10, 50, _windowParent, NULL, _windowInstance, 0); 
_resourceList = CreateWindow("LISTBOX", NULL, WS_CHILD | WS_VISIBLE | LBS_STANDARD | LBS_SORT, 5, 50, 10, 50, _windowParent, NULL, _windowInstance, 0); 

ShowWindow(_objectList, 1); 
ShowWindow(_resourceList, 0); 

他们位于一个TabControl盒子里面,当我点击一个标签,我想说明一个/隐藏其他。我有这样做:

//In the message proc function 
if(uMsg == WM_NOTIFY) 
{ 
    if(((LPNMHDR)lParam)->code == TCN_SELCHANGE) 
    { 
     if(((LPNMHDR)lParam)->hwndFrom == _tabControl.GetWindowHandle()) 
     { 
      int index = SendMessage(_tabControl.GetWindowHandle(), TCM_GETCURSEL, 0, 0); 
      _tabControl.showTab(index); //this function will call the ShowWindow(); to show only the tab I'd like to display 
     } 
    } 
} 

这是列表框的外观,当我第一次运行的代码(链表类向右): Listbox Properly Showing http://img.photobucket.com/albums/v204/Shakazahn/ListboxOK_zpsee5c62b9.jpg

这是当我点击标签: Listbox Got Ugly All of a Sudden http://img.photobucket.com/albums/v204/Shakazahn/ListboxNotOK_zps5d05a019.jpg

如果我点击以显示第一列表框,我也得到: First Listbox Got Infected as Well http://img.photobucket.com/albums/v204/Shakazahn/ListboxNotOK2_zpsc1dca19a.jpg

我试图改变一些窗口的样式但没有任何工作,我也不知道为什么会发生这种情况......对此有任何修复?

编辑:经过一些测试后,我发现这是因为两个Listboxes都是mainWindow的子元素,而不是tabControl窗口。 如果我将两者的parentWindow设置为tabControl,它们显示正常,但我遇到了窗口孙子和许多子类的问题,所以我正在使我的主窗口的所有窗口子项都生效。 我该如何解决这个显示问题?

回答

1

在列表框和选项卡控件上设置WS_CLIPSIBLINGS样式,并确保z顺序使得两个列表框在标签后面绘制。

+0

我把所有的WS_CLIPSIBLINGS,列表框消失。我没有设置任何z顺序,但是我按照TabControl - > ObjectList - > TextureList的顺序创建了它们。我应该用SetWindowPos()改变它还是应该像这样工作? – Danicco 2013-03-03 21:01:05