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

窗口内部是一个显示图片的小窗口,在最大化窗口时希望图片也最大化,最好双击图片时也能最大化,求代码,急,感激不尽... 窗口内部是一个显示图片的小窗口,在最大化窗口时希望图片也最大化,最好双击图片时也能最大化,求代码,急,感激不尽 展开
 我来答
百度网友4327fcbb9b
推荐于2017-10-06 · 知道合伙人教育行家
百度网友4327fcbb9b
知道合伙人教育行家
采纳数:26426 获赞数:292051
从师范学校毕业后一直在现在单位工作

向TA提问 私信TA
展开全部
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);
bhtzu
推荐于2017-09-21 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4049万
展开全部
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都报错

初学,好多都不懂,求教,谢谢
追答
呵呵,上面告诉你了,这是我的列表框,你改成你的图片控件就可以了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式