MFC:如何让对话框中的控件和对话框一起变小变大
2011-04-25 16:43 愤怒的青蛙 阅读(2967) 评论(1) 编辑 收藏 举报转载自: 麦兜响当当
一个基于对话框的MFC界面,怎么样才能让对话框里的控件能和对话框同比例变小变大?今天我一直想解决这个问题,这是师姐留给我的任务。经过在网上的大量搜素,终于找到了解决方法,其实比较简单。
当我们点击最大化按钮的时候,对话框会最大化,但是控件“确定”和“取消”不会跟着变大。如果我们在对话框上面有多少控件,那么会很丑,而且很不实用,最大化本来就是想看的更清楚嘛。
(这里要注意,如果在对话框没有生成前使用GetClientRect(&m_rect)是会报错的,貌似是断言错误,我不知道怎么解决,就使用一个比较笨的方法,在对话框显示出来后手动的再更新这个大小)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | void CLayerItemProDlg::OnSize( UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); // TODO: Add your message handler code here CWnd *pWnd; CWnd *pChild; pWnd = GetDlgItem(IDC_MSFLEXGRID_PROPERTY); 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); } |
然后运行 ,当对话框最大化的时候,两个按钮也变大了。
PS:其实这种方法实现起来简单,但是是存在问题的,如果界面有很多控件,那个当你拖拽窗口的角的时候,经过几次变大变小,你会发现其实里面的控件已经失真了,就不是原来的长宽比例了。那么要实现不管窗口怎么变,里面的控件不但大小跟着变,而且大小比例也跟着变,那就不是这个OnSize函数那么简单了,实现起来有点复杂。等我掌握了这个复杂的方法,一定会拿来分享的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)