隐藏/显示选项卡控件Win32的子窗口

时间:2016-03-22 10:26:37

标签: c winapi

要清楚,我在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会正确显示

2 个答案:

答案 0 :(得分:1)

您似乎遇到了一些常规的复制/粘贴错误。您拨打CreateStaticViewTab1两次,从不致电CreateStaticViewTab2CreateStaticViewTab1CreateStaticViewTab2分配给Task1Tab。这些错误可以解释你观察到的行为。

如果您的代码执行了任何错误检查,那么这会导致您遇到问题。检查错误会显示ShowWindow(Task2Tab, ...)由于窗口句柄无效而失败。因此,除了更多地关注剪贴板之外,另一个重要的教训是,在调用Windows API函数时应始终检查错误。

答案 1 :(得分:0)

显而易见的问题 - CreateStaticViewTab2()从未被调用过。