mfc 窗口大小变化时如何让窗口内部控件也一起随比例改变位置
窗口内部是一个显示图片的小窗口,在最大化窗口时希望图片也最大化,最好双击图片时也能最大化,求代码,急,感激不尽...
窗口内部是一个显示图片的小窗口,在最大化窗口时希望图片也最大化,最好双击图片时也能最大化,求代码,急,感激不尽
展开
2个回答
推荐于2017-10-06 · 知道合伙人教育行家
关注
展开全部
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);
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);
展开全部
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);
追问
CColorList* lst = (CColorList*)GetDlgItem(IDC_LIST1);这句话报错是为什么啊,CColorList* lst和GetDlgItem都报错
初学,好多都不懂,求教,谢谢
追答
呵呵,上面告诉你了,这是我的列表框,你改成你的图片控件就可以了。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询