子窗口随父窗口大小改变问题。

潜龙游水 2012-10-24 09:10:28
我现在做了一个父窗口,几个子窗口,显示的时候是父窗口,其中一个子窗口显示在父窗口的一个静态文本框里(所以的子窗口都显示在这里,按钮切换)。如今我做了了父窗口随意改变大小,并且其控件也随之成比例改变。现在要子窗口的大小也要随之改变,进而子窗口的控件也随之改变。。。。。。。。
问题的关键所在,当父窗口改变的时候,子窗口怎么随之改变?????子窗口改变了,其控件随之改变,我会。。所以请大家指点一下,前面一步该怎么做?????


也就是说在父窗口的OnSize函数里面加那些代码呢?(下面是我加的,子窗口在静态文本框内,但是有错误)
CRect m_rBoder ; CWnd *pBoder ;
pBoder= GetDlgItem(IDC_STATICC);
pBoder->GetWindowRect(&m_rBoder);
ScreenToClient(&m_rBoder);
m_huanre.MoveWindow(&m_rBoder)
...全文
1321 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hai291928193 2015-06-05
  • 打赏
  • 举报
回复
void CtestDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 // 子窗口随着父窗口变大变小 if(m_ctrWeb.GetSafeHwnd()) { m_ctrWeb.MoveWindow(0,0,cx,cy); } }
u010800091 2014-11-15
  • 打赏
  • 举报
回复
我的“edit”子窗口随着View窗口大小变化,在OnSize加这些就可以: CMyDoc* pDoc=GetDocument();//rect数据在Doc里 ASSERT_VALID(pDoc); if (!pDoc) return; GetClientRect(&pDoc->m_viewrect); CWnd::FromHandle(this->m_hwndeditl)->MoveWindow(0,0, (int)(pDoc->m_viewrect.right-pDoc->m_viewrect.left)/3, pDoc->m_viewrect.bottom-pDoc->m_viewrect.top,true);//改位置和大小 虽然我来晚了
二泉映月 2013-08-13
  • 打赏
  • 举报
回复
我创建一个对话框,继承类是FormView,CLeftPaneView : public CFormView 然后再对话框CLeftPaneView中按照上述步骤进行编程, BEGIN_EASYSIZE_MAP(CLeftPaneView) EASYSIZE(IDC_LeftHouseSituation,ES_KEEPSIZE,ES_KEEPSIZE,ES_BORDER,ES_BORDER,0) END_EASYSIZE_MAP 对应的IDC_LeftHouseSituation的按钮不显示,要怎么修改呢,谢谢大侠,帮帮我!
潜龙游水 2013-04-23
  • 打赏
  • 举报
回复
引用 12 楼 lovewc12345 的回复:
引用 11 楼 yjzlq 的回复:问题解决了吗?我也遇到相同问题。求解! 我看你发的帖子 结贴了啊?你也没有解决啊,我也是这个问题,,
解决了哦
lovewc12345 2013-01-30
  • 打赏
  • 举报
回复
引用 11 楼 yjzlq 的回复:
问题解决了吗?我也遇到相同问题。求解!
我看你发的帖子 结贴了啊?你也没有解决啊,我也是这个问题,,
yjzlq 2012-12-12
  • 打赏
  • 举报
回复
问题解决了吗?我也遇到相同问题。求解!
昨夜无风 2012-10-24
  • 打赏
  • 举报
回复

很多控件就只能一个一个调,没其他办法!
潜龙游水 2012-10-24
  • 打赏
  • 举报
回复
本楼主有看过你的提议,但是再三思量那个方法不行,我的静态文本和编辑框很多,easysize要对每个控件设计距离,靠近窗体边框的控件还好说,中间的太多的控件没法设计,我控件布局有点满,各控件大小一样。拉伸的时候可以。但是缩小的时候很难。。。最麻烦的是每句easysize,我要想想该如何设计。。。。不知道我讲的对不对。。。。或许你可以指点我一二少走弯路。。
[Quote=引用 2 楼 的回复:]
pBoder= GetDlgItem(IDC_STATICC);
if(pBoder.m_hWnd!=NULL)//在这里加个判断
{
..........
}
[/Quote]
潜龙游水 2012-10-24
  • 打赏
  • 举报
回复
防止访问空句柄?!!
[Quote=引用楼主 的回复:]
我现在做了一个父窗口,几个子窗口,显示的时候是父窗口,其中一个子窗口显示在父窗口的一个静态文本框里(所以的子窗口都显示在这里,按钮切换)。如今我做了了父窗口随意改变大小,并且其控件也随之成比例改变。现在要子窗口的大小也要随之改变,进而子窗口的控件也随之改变。。。。。。。。
问题的关键所在,当父窗口改变的时候,子窗口怎么随之改变?????子窗口改变了,其控件随之改变,我会。。所以请大家指点一下,前……
[/Quote]
傻X 2012-10-24
  • 打赏
  • 举报
回复
1.获得子窗体的指针MoveWindow来控制(MoveWIndow是SetWindowPos的封装)
大版主和2楼都判断了句柄,这个是很重要的

2.另外推荐个控件EasySize

EasySize

能比较好的满足楼主需要
华美乐章 2012-10-24
  • 打赏
  • 举报
回复
pBoder= GetDlgItem(IDC_STATICC);
if(pBoder.m_hWnd!=NULL)//在这里加个判断
{
..........
}
Eleven 2012-10-24
  • 打赏
  • 举报
回复
在MoveWindow/SetWindowPos()子窗口控件之前先判断一下子窗口的GetSafeHwnd()是否不为NULL
OnSize(...)
{
CWnd *pBoder = GetDlgItem(IDC_STATICC);
if(pBoder && pBoder->GetSafeHwnd()
{
CRect m_rBoder ;
pBoder->GetWindowRect(&m_rBoder);
ScreenToClient(&m_rBoder);
m_huanre.MoveWindow(&m_rBoder)
}

}
em78447 2012-10-24
  • 打赏
  • 举报
回复
和我问题很类似啊~~~
我从网上搜到解决方法
if(nType==SIZE_MINIMIZED)
{
//需要判断一下,是最小化则退出。
//如果是最小化,恢复的时候会BUG,因为整数除以0
return ;
}

CWnd *pWnd;
pWnd = GetDlgItem(IDC_LIST); //获取控件句柄
if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建
{
CRect rect; //获取控件变化前大小
pWnd->GetWindowRect(&rect);
ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标
// cx/m_rect.Width()为对话框在横向的变化比例

rect.left=rect.left*cx/m_rect.Width();//调整控件大小(我的问题,这里少了一个修正值的处理)
rect.right=rect.right*cx/m_rect.Width();
rect.top=rect.top*cy/m_rect.Height();
rect.bottom=rect.bottom*cy/m_rect.Height();
pWnd->MoveWindow(rect);//设置控件大小
}
GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小


但是有个问题,就是窗口变化时候,位置比例关系似乎不对,少了一个修正值的处理
潜龙游水 2012-10-24
  • 打赏
  • 举报
回复
不知道你具体说的什么意思
[Quote=引用 8 楼 的回复:]
控件 位置都动态适应
这样 窗口怎么变 都不会有问题
[/Quote]
longyiqi 2012-10-24
  • 打赏
  • 举报
回复
控件 位置都动态适应
这样 窗口怎么变 都不会有问题
潜龙游水 2012-10-24
  • 打赏
  • 举报
回复
本楼主有看过你的提议,但是再三思量那个方法不行,我的静态文本和编辑框很多,easysize要对每个控件设计距离,靠近窗体边框的控件还好说,中间的太多的控件没法设计,我控件布局有点满,各控件大小一样。拉伸的时候可以。但是缩小的时候很难。。。最麻烦的是每句easysize,我要想想该如何设计。。。。不知道我讲的对不对。。。。或许你可以指点我一二少走弯路。。


[Quote=引用 3 楼 的回复:]
1.获得子窗体的指针MoveWindow来控制(MoveWIndow是SetWindowPos的封装)
大版主和2楼都判断了句柄,这个是很重要的

2.另外推荐个控件EasySize

EasySize

能比较好的满足楼主需要
[/Quote]

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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