您的位置:首页 > 其它

遗留MFC工程上调整对话框大小

2016-03-18 17:15 302 查看
在遗留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
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属性,否则用户通过调整对话框的大小,就可以看到下面本该隐藏的部分。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: