Добавить диалоговое окно в элементах управления вкладками - PullRequest
0 голосов
/ 15 октября 2018

Кажется, я не могу добавить определенное диалоговое окно в TAB CONTROL, которое я создал.

Может ли кто-нибудь мне помочь?

Я создал элементы вкладок (TCITEM)и управление вкладками с использованием CreateWindow.

tab_handle - глобальная переменная HWND.

//create items for tab
    TCITEM tab1Item;
    tab1Item.mask = TCIF_TEXT;
    tab1Item.pszText = "Tab 1";

    TCITEM tab2Item;
    tab2Item.mask = TCIF_TEXT;
    tab2Item.pszText = "Tab 2";
//create tab
    CreateWindow(WC_TABCONTROL, "Test", TCS_FLATBUTTONS | WS_CHILD | WS_VISIBLE, 10, 20, 450, 230, this->m_hWnd, (HMENU) IDD_DLGTAB1, (HINSTANCE)GetWindowLong(this->m_hWnd, GWL_HINSTANCE), NULL);

//getting of tab
    tab_handle = GetDlgItem(this->m_hWnd, IDD_DLGTAB1);

//inserting of tab items in tab
    RECT tab_rectangle;
    GetClientRect(tab_handle, &tab_rectangle);
    int width  = (tab_rectangle.right - tab_rectangle.left);
    int height = (tab_rectangle.bottom - tab_rectangle.top);
//create dialog
    HWND dialog_handle =  CreateDialogParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG2), tab_handle, (DLGPROC) Tab1Dlg::DlgProc, (LPARAM) lParam);

    TabCtrl_InsertItem(tab_handle, 0, &tab1Item);
    TabCtrl_InsertItem(tab_handle, 1, &tab2Item);


    MoveWindow(dialog_handle, tab_rectangle.left+20, tab_rectangle.top+20,(width - 300),(height - 300), TRUE);

    ShowWindow(dialog_handle, SW_SHOW);

1 Ответ

0 голосов
/ 15 октября 2018

Вы должны сначала создать диалог.Затем создайте вкладку как дочерний элемент управления диалогового окна.

Проще использовать редактор диалогов, чтобы перетаскивать элемент управления вкладкой в ​​диалог.Затем вы можете пропустить CreateWindow(WC_TABCONTROL...) и использовать GetDlgItem(dialog_handle, IDC_TAB1), чтобы найти элемент управления вкладкой.

Вам также необходимо создать 2 дочерних диалоговых окна без полей в редакторе ресурсов (не всплывающее диалоговое окно).Затем используйте CreateDialog(0, MAKEINTRESOURCE(IDD_PAGE1), dialog_handle, TabChildProc), чтобы поместить дочерние диалоги внутри вкладки.

При создании модального диалога вы можете использовать DialogBox вместо CreateDialogParam и выполнить инициализацию в WM_INITDIALOG

HINSTANCE hinst = GetModuleHandle(NULL);
HWND dialog_handle = CreateDialogParam(hinst,
    MAKEINTRESOURCE(IDD_DIALOG2), 0, (DLGPROC)Tab1Dlg::DlgProc, (LPARAM)0);
ShowWindow(dialog_handle, SW_SHOW);

RECT rc;
GetClientRect(dialog_handle, &rc);
CreateWindow(WC_TABCONTROL, "Test", TCS_FLATBUTTONS | WS_CHILD | WS_VISIBLE, 
    rc.left + 10, rc.top + 10, 
    rc.right - 20, rc.bottom - 20 - 30, 
    dialog_handle, (HMENU)IDC_TAB1, hinst, NULL);

tab_handle = GetDlgItem(dialog_handle, IDC_TAB1);

TCITEM tci = { 0 };
tci.mask = TCIF_TEXT;
char buf[50];
tci.pszText = buf;

strcpy_s(buf, "Page1");
tci.cchTextMax = strlen(buf);
TabCtrl_InsertItem(tab_handle, 0, &tci);

strcpy_s(buf, "Page2");
tci.cchTextMax = strlen(buf);
TabCtrl_InsertItem(tab_handle, 1, &tci);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...