在选项卡控件中嵌入一个对话框。但它不在标签控件中

时间:2012-11-14 17:42:31

标签: mfc

这是我的来源:

void CCCRView::OnInitialUpdate()
{
.
.
.
    VERIFY(dlg1.Create(CaaaqweqweqweDlg::IDD, this));
    VERIFY(dlg1.SetWindowPos(GetDlgItem(IDC_TAB2),100, 100,200, 200, SWP_SHOWWINDOW|SWP_NOSIZE|SWP_NOMOVE));
    dlg1.ShowWindow(SW_SHOW);
}

使用: IDC_TAB2:是标签控件.............. dlg1:我希望嵌入的对话框.................................... CaaaqweqweqweDlg:类对话框的名称。(CaaaqweqweqweDlg dlg1;)...................................... .........

这是我的设计:

enter image description here

这是我的结果: enter image description here

我们可以看到对话框不在选项卡控件中。 来人帮帮我?感谢!!!

3 个答案:

答案 0 :(得分:0)

您必须将对话框样式更改为CHILD。您可能设置了POPUP样式。

答案 1 :(得分:0)

对话框或其他控件不是选项卡的子项,它们也是选项卡本身所在窗口的子项。你要做的是使用CTabCtrl的AdjustRect()来计算选项卡内容的位置。此外,您必须手动管理选项卡更改并处理要执行的操作(通常,这意味着隐藏除了您希望成为选项卡一部分的控件之外的所有内容)。

从历史上看,您可以在CTabCtrl上编写自己的抽象,以便它可以包含控件或窗口,并且可以将选项卡与其所在的窗口分离。但是,由于MFC Next有一个CMFCTabCtrl,它的行为与你期望的一样,所以使用它,你会很好。

答案 2 :(得分:0)

如果要正确放置子对话框,则必须:

  • 获取参考标签控件位置以正确放置对话框
  • 删除SWP_NOSIZE | SWP_NOMOVE以应用此职位

它会看起来像这样(未经测试):

dlg1.Create(CaaaqweqweqweDlg::IDD, this);

CRect Rect;
GetDlgItem(IDC_TAB2)->GetWindowRect(Rect);
Rect.InflateRect(-10, -10);
ScreenToClient(Rect);

dlg1.SetWindowPos(&wndTop, Rect.left, Rect.top, Rect.Width(), Rect.Height(), SWP_SHOWWINDOW);

wndTop将确保对话框位于任何其他控件之上。