遗留MFC工程上调整对话框大小
2016-03-18 17:15
302 查看
在遗留MFC工程上,调整对话框对象,以达到隐藏不关注的那些控件。
诉求:一个老的工程上,现在只需要其中很小一部分功能,想偷懒,不需要全部重写,不想大规模改写。比如如果直接去删除对话框上的一些控件,那么这些控件映射的成员变量、消息处理,都需要考虑。
偷懒的做法:把不需要的控件全部给扔到对话框的下面,要用到的部分布局到对话框的左上角。在对话框初始化的时候调整窗口大小,隐藏掉那些用不到的控件。
示例:
原来的样子如下,现在只需要保留上面3个控件(2个编辑框加一个文本框)。
即希望的样子:
对话框资源:
在隐藏下半部分的时候,需要注意Group控件的显示效果,即要完整地显示这个group,而不是显示一个残缺的样子:
思路:
先确定要显示的编辑框的bottom坐标;
基于此,调整Group控件的bottom坐标;
调整对话框的bottom坐标。
代码:
在OnInitDialog()中调用这个函数。
还需要主要的是:对话框的Border不能是Resizing属性,否则用户通过调整对话框的大小,就可以看到下面本该隐藏的部分。
诉求:一个老的工程上,现在只需要其中很小一部分功能,想偷懒,不需要全部重写,不想大规模改写。比如如果直接去删除对话框上的一些控件,那么这些控件映射的成员变量、消息处理,都需要考虑。
偷懒的做法:把不需要的控件全部给扔到对话框的下面,要用到的部分布局到对话框的左上角。在对话框初始化的时候调整窗口大小,隐藏掉那些用不到的控件。
示例:
原来的样子如下,现在只需要保留上面3个控件(2个编辑框加一个文本框)。
即希望的样子:
对话框资源:
IDD_CHANGEWINDOWSIZE_DIALOG DIALOGEX 0, 0, 222, 153 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU EXSTYLE WS_EX_APPWINDOW CAPTION "ChangeWindowSize" FONT 8, "MS Shell Dlg", 0, 0, 0x1 BEGIN GROUPBOX "All Controls",IDC_GROUP,14,7,192,139 PUSHBUTTON "First",IDC_FIRST,26,20,77,20,WS_DISABLED PUSHBUTTON "Second",IDC_SECOND,117,20,77,20 EDITTEXT IDC_THIRD,26,52,168,20,ES_AUTOHSCROLL PUSHBUTTON "Fourth",IDC_FOURTH,26,85,77,20,WS_DISABLED PUSHBUTTON "Fifth",IDC_FIFTH,118,85,77,20,WS_DISABLED EDITTEXT IDC_SOME_OTHERS,25,112,168,20,ES_AUTOHSCROLL | WS_DISABLED END
在隐藏下半部分的时候,需要注意Group控件的显示效果,即要完整地显示这个group,而不是显示一个残缺的样子:
思路:
先确定要显示的编辑框的bottom坐标;
基于此,调整Group控件的bottom坐标;
调整对话框的bottom坐标。
代码:
void CChangeWindowSizeDlg::ChangeWindowSize() { CRect rect; GetDlgItem(IDC_THIRD)->GetWindowRect(&rect); int bottom = rect.bottom; GetDlgItem(IDC_GROUP)->GetWindowRect(&rect); rect.bottom = bottom + 10; ScreenToClient(&rect); GetDlgItem(IDC_GROUP)->MoveWindow(&rect); GetClientRect(&rect); rect.bottom = bottom + 20; MoveWindow(&rect); }
在OnInitDialog()中调用这个函数。
还需要主要的是:对话框的Border不能是Resizing属性,否则用户通过调整对话框的大小,就可以看到下面本该隐藏的部分。
相关文章推荐
- 在启动web项目的时候出现java.lang.NoSuchFieldError: TRACE的缘由
- 个人简介
- C++之虚函数和多态
- YII2框架的安装
- 面向对象的三大特性
- Eclipse没有 web Project 选项的解决办法
- Linux命令:head
- MyBatis学习总结
- iOS CALayer的学习
- Caffe学习笔记5-BLAS与boost::thread加速
- BZOJ4426 : [Nwerc2015]Better Productivity最大生产率
- jquery.mobile新手说明与示例
- 详解spl_autoload_register()函数
- 在windows xp x86中配置python开发环境
- error C4235: 使用了非标准扩展: 不支持在此结构上使用“_asm”关键字
- python3.5之string
- @RequestMapping("/myway")
- iOS中.pch文件如何使用
- 程序员也需要这种魄力
- MyBatis对于Java对象里的枚举类型处理