mfc 窗口大小变化时如何让窗口内部控件也一起随比例改变位置

2024-12-15 10:53:26
推荐回答(2个)
回答1:

mfc 窗口大小变化时让窗口内部控件也一起随比例改变位置:
void CXTest2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
//将窗口移动到合适位置和大小
CRect rc,rc0,rc1;
GetClientRect(&rc0);//先取得整个对话框的大小及位置
//设置Tab控件位置
rc1.top=rc0.top;
rc1.left=rc0.left+1;
rc1.bottom=rc0.bottom-30;
rc1.right=rc0.right-1;
if(GetDlgItem(IDC_TAB1)!=NULL)
{
GetDlgItem(IDC_TAB1)->MoveWindow(&rc1);
}

//设置时钟位置
rc1.top=rc0.bottom-20;
rc1.left=rc0.left+5;
rc1.bottom=rc0.bottom;
rc1.right=rc0.left+160;
if(GetDlgItem(IDC_CLOCKTEST)!=NULL)
{
GetDlgItem(IDC_CLOCKTEST)->MoveWindow(&rc1);
}
//设置关闭按钮位置
rc1.top=rc1.top-5;
rc1.left=rc0.right-200;
rc1.bottom=rc1.bottom;
rc1.right=rc0.right-120;
if(GetDlgItem(IDOK)!=NULL)
{
GetDlgItem(IDOK)->MoveWindow(&rc1);
}
//设置取消按钮位置
rc1.left=rc0.right-100;
rc1.right=rc0.right-20;
if(GetDlgItem(IDCANCEL)!=NULL)
{
GetDlgItem(IDCANCEL)->MoveWindow(&rc1);
}

//将三个对话框资源定位到Tab控件中
if(GetDlgItem(IDC_TAB1)!=NULL)
{
GetDlgItem(IDC_TAB1)->GetClientRect(&rc);
rc1.top=rc.top+20;
rc1.left=rc.left+1;
rc1.bottom=rc.bottom-10;
rc1.right=rc.right-1;

tab1.GetClientRect(&rc1);
tab1.GetDlgItem(IDC_MSGINFO)->MoveWindow(&rc1);//移动第一个
rc1.bottom=rc.bottom-35;//第二个及第三个底部留出按钮位置
tab2.GetDlgItem(IDC_BNSLIST)->MoveWindow(&rc1);
tab3.GetDlgItem(IDC_MSGERRINFO)->MoveWindow(&rc1);

回答2:

void CxxDialog::OnSize(UINT nType, int cx, int cy) 
{
CDialog::OnSize(nType, cx, cy);

CRect rt;
CColorList* lst = (CColorList*)GetDlgItem(IDC_LIST1);
if(lst==NULL) return;
lst->GetWindowRect(rt);
ScreenToClient(rt);
rt.right = cx-10;
rt.bottom = cy-10;
lst->MoveWindow(rt);
}

这是我之前写的一个列表框随着对话框变大的代码,你可以参考一下。

双击图片控件,可以重载对话框的控件双击消息,在里面直接发送窗口最大化消息即可

	ShowWindow(SW_SHOWMAXIMIZED);