选项卡控件中的添加对话框

时间:2018-10-15 08:27:35

标签: c++ winapi tabs

我似乎无法在我创建的TAB CONTROL中添加特定对话框。

有人可以帮我吗?

我已经使用CreateWindow创建了标签项(TCITEM)和标签控件。

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 :(得分:0)

您必须首先创建对话框。然后创建选项卡控件作为对话框的子控件。

使用对话框编辑器将选项卡控件拖放到对话框中会更容易。然后,您可以跳过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);