我不知道如何隐藏子窗口(控件),更具体地说是 GroupBox 和 PushButton。我认为以SW_HIDE作为第二个参数的ShowWindow()可以完成这项工作,但它根本不起作用。然而SW_SHOW工作得很好。我对两个控件都有正确的窗口句柄,所以这不是问题。
我用谷歌搜索,我能找到的只是人们问如何隐藏对话框,而不是控件。该应用程序或基于 MFC 的应用程序在此处不适用。我使用的是纯 Windows API,没有 MFC。
我怎么了?
编辑:更多信息:我正在为 WinApi 控件编写一些简单的类包装器。除了其他方法,WindowsControl 类还具有以下用于显示和隐藏控件的方法:
void Show() {
ShowWindow(this->_hWnd,SW_SHOWNOACTIVATE);
}
void Hide() {
ShowWindow(this->_hWnd,SW_HIDE);
}
每个控件都继承自 WindowsControl。
此图像具有窗口布局,因此您可以准确了解我在做什么:http: //i.stack.imgur.com/PHQnH.png
当用户在“Chipset”静态控件内单击时,它将加载给定 Tile 的信息(存储在数组中,但这无关紧要)。根据设置,它将隐藏左侧的“编辑位墙”按钮并在其后面显示空的 GroupBox,反之亦然。只是要清楚这不是我的 windows api 包装器有问题,我得到了正确的 HWND。尽管 ShowWindow 可能无法从不是父级的窗口过程中调用(这很奇怪)。
EDIT2:在 Visual Studio 2008 中使用 C++,没有 MFC,没有 WTL,没有 CLR,没有 .NET
EDIT3:我会发布更多代码,这样更容易
在静态的窗口过程中,我像这样处理 WN_LBUTTONDOWN:
case WM_LBUTTONDOWN: {
...
update_tiledata(c, l)
void update_tiledata(GroupBox * c, ListView* l ) {
...
if (chp_copy.Tiles[selectedTile].Pass() == PT_BITWALL) {
c->Controls(CTL_BTNEDITBIT)->Show();
c->Controls(CTL_FRPHOLD)->Hide();
} else {
c->Controls(CTL_FRPHOLD)->Show();
c->Controls(CTL_BTNEDITBIT)->Hide();
}
update_edits();
}
省略的代码不会影响类,正如我之前所说,使用正确的 HWND 调用带有 SW_HIDE 的 ShowWindow,但没有发生任何事情。