子对话框嵌入的问题,如何在特定的位置里面出现?

lsupper 2009-10-12 01:46:31
比如,我现在嵌入了子对话框,用了以下代码:
//------------OnInitDialog----------------------
CRect r;
(GetDlgItem(IDC_STATIC1))->GetWindowRect(&r);
t1 = new CTest1Dlg();
t1->Create(IDD_DIALOG1,this);
t1->MoveWindow(&r,TRUE);
IDC_STATIC1是一个groupbox,我现在想t1,居中显示在groupbox中,怎么办?
或者有什么其它的方法,可以让我的子对话框显示到确定的一个位置上,盼代码,最好详细点~~~~~~
...全文
187 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsupper 2009-10-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 muzizongheng 的回复:]
为什么, 我的m_dlg声明的是对象, 你的是指针, 当然得先new个申请内存了.


lz给分吧.
[/Quote]
给了~~~~~~~
wjlsmail 2009-10-17
  • 打赏
  • 举报
回复
get the groupbox's rect,
then ScreenToClient the whole screen,
finally movewindow the special form to the rect.
muzizongheng 2009-10-17
  • 打赏
  • 举报
回复
为什么, 我的m_dlg声明的是对象, 你的是指针, 当然得先new个申请内存了.


lz给分吧.
lsupper 2009-10-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 muzizongheng 的回复:]
给你代码, 呵呵, 不能用你用砖头拍死我
C/C++ code
CRect rectDummy;
rectDummy.SetRectEmpty();

CWnd* pWnd= (CWnd*)GetDlgItem(IDC_GROUP1);//your group id.if (pWnd!= NULL)
{
pWnd->ShowWindow(SW_HIDE);
pWnd->GetWindowRect(&rectDummy);
ScreenToClient(&rectDummy);
}else
{return;
}// Create child window: m_dlg.Create(IDD_YOURDLD,this);
m_dlg.MoveWindow(rectDummy);
[/Quote]

最后两行:
}// Create child window: m_dlg.Create(IDD_YOURDLD,this);
m_dlg.MoveWindow(rectDummy);
我用了程序直接报错,但是改成:
m_ChildDlg = new CChildDlg();
m_ChildDlg->Create(IDD_DIALOG_child,this);

m_ChildDlg->MoveWindow(&rectDummy,true);
就OK ,为什么???
WilsonChinaBug 2009-10-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 muzizongheng 的回复:]
引用 5 楼 xylicon 的回复:
引用 4 楼 muzizongheng 的回复:
给你代码, 呵呵, 不能用你用砖头拍死我


哈哈,这么狠?


O(∩_∩)O~。
贻笑大方了。
[/Quote]

强悍的楼主和木子纵横
muzizongheng 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xylicon 的回复:]
引用 4 楼 muzizongheng 的回复:
给你代码, 呵呵, 不能用你用砖头拍死我


哈哈,这么狠?
[/Quote]

O(∩_∩)O~。
贻笑大方了。
xylicon 2009-10-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 muzizongheng 的回复:]
给你代码, 呵呵, 不能用你用砖头拍死我
[/Quote]

哈哈,这么狠?
muzizongheng 2009-10-12
  • 打赏
  • 举报
回复
给你代码, 呵呵, 不能用你用砖头拍死我

CRect rectDummy;
rectDummy.SetRectEmpty();

CWnd* pWnd = (CWnd*)GetDlgItem(IDC_GROUP1); //your group id.
if (pWnd != NULL)
{
pWnd->ShowWindow(SW_HIDE);
pWnd->GetWindowRect(&rectDummy);
ScreenToClient(&rectDummy);
}
else
{
return;
}

// Create child window:
m_dlg.Create(IDD_YOURDLD, this);
m_dlg.MoveWindow(rectDummy);


凤矶 2009-10-12
  • 打赏
  • 举报
回复
没有捷径,只能取IDC_STATIC1的RECT,再取t1的RECT,
CRect rt1,rt_t1;
(GetDlgItem(IDC_STATIC1))->GetWindowRect(&rt1);
t1 = new CTest1Dlg();
t1->Create(IDD_DIALOG1,this);
t1.GetWindowRect(&rt_t1);
int CX = (rt1.Width()-rt_t1.Width())/2;
int CY = (rt1.Height()-rt_t1.Height())/2;
rt_t1.OffsetRect(rt1.left+cx, rt1.top+cy);
t1->MoveWindow(&rt_t1,TRUE);
fishion 2009-10-12
  • 打赏
  • 举报
回复
你在groupbox中间添加一个静态文本框IDC_STATIC2,
CRect r;
(GetDlgItem(IDC_STATIC2))->GetClientRect(&r);
t1 = new CTest1Dlg();
t1->Create(IDD_DIALOG1,GetDlgItem(IDC_STATIC2));
t1->MoveWindow(&r,TRUE);
雪影 2009-10-12
  • 打赏
  • 举报
回复
t1是一个非模态对话框,怎么能嵌入到另外一个对话框中呢?

建议将t1换成CStatic控件,则可以嵌入显示在对话框之中。

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧