隐藏/显示选项卡控件Win32的子窗口
要清楚,我在win32中编码,并没有使用MFC,wxWidgets或.net。
我的问题是我有一个带有2个选项卡的选项卡控件。 为了进行调试,每个选项卡都有一个STATIC
窗口。 初始化时,运行以下代码:
createTabControl();
CreateStaticViewTab1();
CreateStaticViewTab1();
ShowWindow(Task1Tab, SW_SHOW);
哪里
void createTabControl(){
TCITEM tie = { 0 };
hWndInputTab = CreateWindow(WC_TABCONTROL, L"Input", WS_VISIBLE | WS_CHILD , 10, 40, 300, 650, hWnd, (HMENU)TAB_INPUT, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE), NULL);
SetDefaultFont(hWndInputTab);
tie.mask = TCIF_TEXT;
TCHAR pszTab1[] = L"TAB 1";
tie.pszText = pszTab1;
TabCtrl_InsertItem(hWndInputTab, 0, &tie)
TCHAR pszTab2[] = L"TAB 2";
tie.pszText = pszTab2;
TabCtrl_InsertItem(hWndInputTab, 1, &tie)
}
void CreateStaticViewTab1(){
Task1Tab = CreateWindowEx(0,L"STATIC",L"Static Control on Tab1",WS_CHILD | WS_BORDER | SS_CENTER | SS_CENTERIMAGE, 75, 75, 200, 60, hWndInputTab,NULL, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
SetDefaultFont(Task1Tab);
}
void CreateStaticViewTab2(){
Task1Tab = CreateWindowEx(0,L"STATIC",L"Static Control on Tab2",WS_CHILD | WS_BORDER | SS_CENTER | SS_CENTERIMAGE, 75, 75, 200, 60, hWndInputTab,NULL, (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),NULL);
SetDefaultFont(Task2Tab);
}
在WndProc
,我正在处理WM_NOTIFY
消息。 我已经检查并确认它正确执行,调用相应的函数( ShowTab1()
和ShowTab2()
)。
这两个功能用于在选择更改时显示和隐藏适当的选项卡。 他们是这样做的:
void ShowTab1(){
ShowWindow(Task2Tab, SW_HIDE);
ShowWindow(Task1Tab, SW_SHOW);
}
void ShowTab2(){
ShowWindow(Task1Tab, SW_HIDE);
ShowWindow(Task2Tab, SW_SHOW);
}
这些应该 - 据我了解 - 根据情况隐藏并显示正确的标签。
我的问题是,当程序加载时,显示正确的选项卡(1)。 单击选项卡2时,选项卡1( Task1Tab
)的内容被正确隐藏,但是,选项卡2( Task2Tab
)的内容未正确显示。 当返回到选项卡1时, Task1Tab
将正确显示。
我无法确定为什么两段代码之间存在差异,因为它们几乎完全相同。
NB。 我在初始化时测试了没有ShowWindow(Task1Tab, SW_SHOW)
的代码,这会创建没有任何内容的选项卡,并且在单击选项卡2时,不显示任何内容,但是,单击选项卡1时, Task1Tab
会正确显示。
您似乎被一些常规复制/粘贴错误所困扰。 您可以调用CreateStaticViewTab1
两次,并且永远不要调用CreateStaticViewTab2
。 并且将CreateStaticViewTab1
和CreateStaticViewTab2
分配给Task1Tab
。 这些错误会解释你观察到的行为。
如果您的代码执行了任何错误检查,那么这会导致您遇到问题。 检查错误将显示ShowWindow(Task2Tab, ...)
由于窗口句柄无效而失败。 所以,另一个重要的教训是,除了更加注意剪贴板之外,您应该在调用Windows API函数时始终检查错误。
明显的问题 - 从未调用过CreateStaticViewTab2()
。