ste*_*nix 1 windows winapi controls hide showwindow
我无法弄清楚如何隐藏子窗口(控件),更具体地说是GroupBox和PushButton.我认为使用SW_HIDE作为第二个参数的ShowWindow()可以完成这项工作,但它根本不起作用.然而SW_SHOW工作正常.我有两个控件的正确窗口句柄,所以这不是问题.
我用谷歌搜索,所有我能找到的人都在询问如何隐藏对话框,而不是控件.基于MFC的应用程序,不适用于此处.我使用的是纯Windows API,没有MFC.
我错了什么?
编辑:更多信息:我正在为WinApi控件编写一些简单的类包装器.除其他方法外,WindowsControl类还具有以下显示和隐藏Control的方法:
void Show() {
ShowWindow(this->_hWnd,SW_SHOWNOACTIVATE);
}
void Hide() {
ShowWindow(this->_hWnd,SW_HIDE);
}
Run Code Online (Sandbox Code Playgroud)
每个控件都继承自WindowsControl.
这个图像有窗口布局,所以你准确理解我在做什么:http://i.stack.imgur.com/PHQnH.png
当用户在"芯片组"静态控件内部单击时,它将加载给定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();
}
Run Code Online (Sandbox Code Playgroud)
如前所述,ommited代码没有对类进行任何影响,使用正确的HWND调用带有SW_HIDE IS的ShowWindow,但没有任何事情发生.
可以使用隐藏窗口或对话框中的控件
ShowWindow(hControlWin,SW_HIDE);
在对话框中,您可以通过调用来检索控件窗口句柄
GetDlgItem(hDlg,<CtrlID>);
通常你写的东西如下:
ShowWindow(GetDlgItem(hDlg,2),SW_HIDE);
如果您提供更多信息和一些代码将会有所帮助:您是如何创建控件的?你使用什么语言,编译和框架?
| 归档时间: |
|
| 查看次数: |
14118 次 |
| 最近记录: |