隐藏/显示选项卡控件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 。 并且将CreateStaticViewTab1CreateStaticViewTab2分配给Task1Tab 。 这些错误会解释你观察到的行为。

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


明显的问题 - 从未调用过CreateStaticViewTab2()

链接地址: http://www.djcxy.com/p/41201.html

上一篇: Hiding/Showing Child Windows of a Tab Control Win32

下一篇: create window in tab c++