Um klar zu sein, ich bin in Win32 codieren und verwende keine MFC, WxWidgets oder .net.Verstecken/Zeigen Kind Windows eines Tab Control Win32
Mein Problem ist, dass ich ein Tab-Steuerelement mit 2 Registerkarten habe. Zu Debugging-Zwecken verfügt jede Registerkarte über ein einzelnes STATIC
-Fenster. Bei der Initialisierung wird der folgende Code ausgeführt:
createTabControl();
CreateStaticViewTab1();
CreateStaticViewTab1();
ShowWindow(Task1Tab, SW_SHOW);
Wo
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);
}
Im WndProc
ich die WM_NOTIFY
Nachricht am Umgang. Ich habe überprüft und kann bestätigen, dass es korrekt ausgeführt wird, die entsprechenden Funktionen (ShowTab1()
und ShowTab2()
) aufrufen.
Diese beiden Funktionen dienen zum Ein- und Ausblenden der entsprechenden Registerkarten, wenn sich die Auswahl ändert. Sie tun dies durch die folgende:
void ShowTab1(){
ShowWindow(Task2Tab, SW_HIDE);
ShowWindow(Task1Tab, SW_SHOW);
}
void ShowTab2(){
ShowWindow(Task1Tab, SW_HIDE);
ShowWindow(Task2Tab, SW_SHOW);
}
Diese sollten - wie ich es verstehe - verstecken und zeigen die richtige Tabs als angemessen.
Mein Problem ist, dass beim Laden des Programms die richtige Registerkarte (1) angezeigt wird. Wenn Tab 2 angeklickt wird, ist der Inhalt von Tab 1 (Task1Tab
) korrekt ausgeblendet, der Inhalt von Tab 2 (Task2Tab
) wird jedoch nicht korrekt angezeigt. Wenn Sie zu Tab 1 zurückkehren, wird Task1Tab
korrekt angezeigt.
Ich kann nicht identifizieren, warum es einen Unterschied zwischen den zwei Teilen des Codes gibt, wie sie praktisch identisch sind.
nb. Ich habe den Code ohne die ShowWindow(Task1Tab, SW_SHOW)
in der Initialisierung getestet, dies erstellt die Registerkarten ohne Inhalt und wenn Tab 2 geklickt wird, wird nichts angezeigt, wenn jedoch auf Tab 1 geklickt wird, wird Task1Tab
korrekt angezeigt.
Sie rufen niemals CreateStaticViewTab2 auf. Sie rufen 'CreateStaticViewTab1' zweimal auf. 'Task2Tab' wird niemals zugewiesen. Oder ist dieser Code gefälscht? Mein Rat, produziere einen [mcve], damit wir darauf vertrauen können, dass wir den gleichen Code wie du sehen. –
Nein, Sie sind völlig richtig. Hoppla! –
Es ist auch Zeit, auf 'TCHAR' zu verzichten. Ihr Code zielt auf Unicode ab. Verwende 'wchar_t'. Geben Sie nicht vor, dass Ihr Code auf ANSI ausgerichtet sein kann. Es kann nicht. –