明らかに、私はwin32でコーディングしていて、MFC、wxWidgets、または.netを使用していません。タブコントロールの子ウィンドウの非表示/表示Win32
私の問題は、2つのタブを持つタブコントロールがあることです。デバッグの目的で、各タブには単一のSTATIC
ウィンドウがあります。初期化すると、次のコードが実行されます。WndProc
で
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);
}
、私はWM_NOTIFY
メッセージを処理しています
createTabControl();
CreateStaticViewTab1();
CreateStaticViewTab1();
ShowWindow(Task1Tab, SW_SHOW);
。私は、適切な機能(ShowTab1()
とShowTab2()
)を呼び出して、正しく実行されていることを確認して確認できます。
これら2つの機能は、選択が変更されたときに適切なタブを表示および非表示にするように設計されています。彼らは次のようにします:
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
が正しく表示されます。
2つのコードが実質的に同一であるため、2つのコードに違いがある理由はわかりません。
nb。初期設定でShowWindow(Task1Tab, SW_SHOW)
のコードをテストしましたが、これはコンテンツなしでタブを作成し、タブ2をクリックすると何も表示されませんが、タブ1をクリックすると、Task1Tab
が正しく表示されます。
あなたは決して 'CreateStaticViewTab2'を呼び出しません。 'CreateStaticViewTab1'を2回呼び出します。 'Task2Tab'は決して割り当てられません。あるいは、このコードは偽造ですか?私のアドバイスは、[mcve]を作り、私たちがあなたと同じコードを見ているという自信を持っています。 –
いいえ、あなたは完全です。おっとっと! –
また、 'TCHAR'の使用を中止する時もあります。あなたのコードはUnicodeをターゲットにしています。 'wchar_t'を使います。コードがANSIを対象とすることはできません。できない。 –