本文主要是介绍遗留MFC工程上调整对话框大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在遗留MFC工程上,调整对话框对象,以达到隐藏不关注的那些控件。
诉求:一个老的工程上,现在只需要其中很小一部分功能,想偷懒,不需要全部重写,不想大规模改写。比如如果直接去删除对话框上的一些控件,那么这些控件映射的成员变量、消息处理,都需要考虑。
偷懒的做法:把不需要的控件全部给扔到对话框的下面,要用到的部分布局到对话框的左上角。在对话框初始化的时候调整窗口大小,隐藏掉那些用不到的控件。
示例:
原来的样子如下,现在只需要保留上面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
BEGINGROUPBOX "All Controls",IDC_GROUP,14,7,192,139PUSHBUTTON "First",IDC_FIRST,26,20,77,20,WS_DISABLEDPUSHBUTTON "Second",IDC_SECOND,117,20,77,20EDITTEXT IDC_THIRD,26,52,168,20,ES_AUTOHSCROLLPUSHBUTTON "Fourth",IDC_FOURTH,26,85,77,20,WS_DISABLEDPUSHBUTTON "Fifth",IDC_FIFTH,118,85,77,20,WS_DISABLEDEDITTEXT 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属性,否则用户通过调整对话框的大小,就可以看到下面本该隐藏的部分。
这篇关于遗留MFC工程上调整对话框大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!