Как отобразить диалоговое окно на странице управления вкладками? - PullRequest
0 голосов
/ 04 июня 2011

Как мне установить другое диалоговое окно, видимое внутри вкладки, которая в данный момент открыта в объекте Tab Control?

Я создаю Tab Control в редакторе ресурсов Visual Studio 2008 (или как он называется?),я создал IDD_FORMVIEW диалоговое окно для элемента управления вкладками.

Я знаю, как инициализировать текст вкладки, обрабатывать текущую выбранную вкладку с помощью сообщения WM_NOTIFY и т. д., но мне не хватает: как отправить дескриптормоего другого диалогового окна на страницу управления вкладками для отображения там диалогового окна?

1 Ответ

2 голосов
/ 04 июня 2011

Все «вкладки», которые являются диалогами, должны быть установлены как дочерние элементы для созданной вкладки. При изменении вкладки вы получите уведомление, которое вы можете обработать в 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...