【问题标题】:Add Dialog Box in Tab Controls在选项卡控件中添加对话框
【发布时间】:2018-10-15 08:27:35
【问题描述】:

我似乎无法在我创建的 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);

【问题讨论】:

    标签: c++ winapi tabs


    【解决方案1】:

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

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

    【讨论】:

    • 请注意,使用属性表对话框可能更容易,具体取决于您要完成的工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    相关资源
    最近更新 更多