Все «вкладки», которые являются диалогами, должны быть установлены как дочерние элементы для созданной вкладки. При изменении вкладки вы получите уведомление, которое вы можете обработать в DialogProc следующим образом:
case WM_NOTIFY: {
switch( ( ( LPNMHDR ) lParam) -> code ) {
case TCN_SELCHANGE: {
if( TabCtrl_GetCurSel( ( ( LPNMHDR ) lParam) -> hwndFrom ) == 0 ) {
ShowWindow( hwndPathSettings, SW_SHOW );
ShowWindow( hwndStartSettings, SW_HIDE );
} else {
ShowWindow( hwndPathSettings, SW_HIDE );
ShowWindow( hwndStartSettings, SW_SHOW );
}
break;
}
Как вы можете видеть, когда пользователь меняет вкладку, код показывает новую дочернюю вкладку и скрывает старые. hwndPathSettings и hwndStartSettings в этом случае являются дескрипторами окна дочерних диалогов.
Чтобы поместить это в контекст, в вашем WM_INITDIALOG у вас, вероятно, будет какой-то код, подобный этому, для настройки вкладки:
HWND hwndTab = GetDlgItem( hwndDlg, IDC_TAB );
TCITEM tci = {0};
tci.mask = TCIF_TEXT;
tci.pszText = _T("Path");
TabCtrl_InsertItem( hwndTab, 0, &tci );
tci.pszText = _T("Run on Start");
TabCtrl_InsertItem( hwndTab, 1, &tci );
hwndPathSettings = CreateDialogParam( GetModuleHandle( NULL ),
MAKEINTRESOURCE( IDD_PATHSETTINGS ), hwndTab, PathSettingsProc, lParam );
hwndStartSettings = CreateDialog( GetModuleHandle( NULL ),
MAKEINTRESOURCE( IDD_STARTSETTINGS ), hwndTab, StartSettingsProc );
break;