要清楚,我在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
会正确显示
答案 0 :(得分:1)
您似乎遇到了一些常规的复制/粘贴错误。您拨打CreateStaticViewTab1
两次,从不致电CreateStaticViewTab2
。 CreateStaticViewTab1
和CreateStaticViewTab2
分配给Task1Tab
。这些错误可以解释你观察到的行为。
如果您的代码执行了任何错误检查,那么这会导致您遇到问题。检查错误会显示ShowWindow(Task2Tab, ...)
由于窗口句柄无效而失败。因此,除了更多地关注剪贴板之外,另一个重要的教训是,在调用Windows API函数时应始终检查错误。
答案 1 :(得分:0)
显而易见的问题 - CreateStaticViewTab2()
从未被调用过。