MFC重写OnSize()之后控件丢失

pqcoder 2013-08-31 12:46:17
我重写了窗口的OnSize()消息,想要控件的布局随着窗口的大小变化,但是点击最大化,最小化的侍候,窗口中的控件就丢失了,请各位高人指点迷津。

具体重写代码给出如下:
void CMyEverythingDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
/* BOOL isSizeChanged = (nType == SIZE_MAXIMIZED) ||
(nType == SIZE_MINIMIZED) ||
(nType == SIZE_RESTORED ) ||
(nType == SIZE_MAXHIDE ) ||
(nType == SIZE_MAXSHOW );
*/
//如果Init完毕,那么调用ReSize
if ( m_bIsInit )
{
this->Invalidate(TRUE);

//改变窗口控件的位置
for ( int i = 0; i < sizeof(RES_LIST) / sizeof(int); ++i )
{
Resize(RES_LIST[i]);
}

//保存需要回复的放大倍数(倒数)
m_fMultiWidth = float(1 / m_fMultiWidth);
m_fMultiHeight = float(1 / m_fMultiHeight);
}
}

/*********************************************************************
函数名 :Resize
函数作用 :调整窗口具体控件的未知大小
输入参数 :const int iID
输出参数 :void
*********************************************************************/
void CMyEverythingDlg::Resize(const int iID)
{
CRect rect;
this->GetDlgItem(iID)->GetWindowRect(&rect);

//计算控件左上角点的改变
CPoint oldLTPoint,newLTPoint;
oldLTPoint = rect.TopLeft();
newLTPoint.x = long(m_fMultiWidth * oldLTPoint.x);
newLTPoint.y = long(m_fMultiHeight * oldLTPoint.y);

//计算控件右下角的改变
CPoint oldBRPoint,newBRPoint;
oldBRPoint = rect.BottomRight();
newBRPoint.x = long(m_fMultiWidth * oldBRPoint.x);
newBRPoint.y = long(m_fMultiHeight * oldBRPoint.y);

//移动控件到新的矩形
rect.SetRect(newLTPoint,newBRPoint);
this->GetDlgItem(iID)->MoveWindow(&rect,TRUE);
}
...全文
224 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2013-10-07
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
Eleven 2013-09-02
  • 打赏
  • 举报
回复
codeproject上搜索EASYSIZE
zhangyihu321 2013-09-02
  • 打赏
  • 举报
回复
控件也要跟着窗体走 放小丢失 放大就看出来了。。。
  • 打赏
  • 举报
回复
主要是 Resize 把 控件 和 dialog的相对位置变了,这样控件看不见了,调整一下 rect 位置。要保证控件放大再缩小后可以回位

15,979

社区成员

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

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