预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

作者:molin00@qq.com 一般情况下,我们新建的对话框,里面的“确定”和:取消”按钮,在对话框最大化得时候,不会一起变大的,而是保持原来的大小。 而MFC默认不支持控件大小按比例缩放功能 最简单的情况: 当我们点击最大化按钮的时候,对话框会最大化,但是控件“确定”和“取消”不会跟着变大。如果我们在对话框上面有多少控件,那么会很丑,而且很不实用,最大化本来就是想看的更清楚嘛。 我们可以采取下面的措施:对话框也是窗口,最大化是对窗口大小的改变,而在windowsmessagehandle中有个WM_SIZE的消息,该消息在窗口大小发生变化的时候会产生。那么我们可以根据这个消息,在窗口大小发生变化的时候,利用MoveWindow()函数来重新设置各个控件的大小。 在网上查了一些资料,都不方便使用,还需要自己写好多代码。在这里我封装了一个简单的类,可以实现这个功能: 用法是, 1、在对话框类头文件中添加此类的对象CItemResizem_itemSize; 2、在窗口初始化函数OnInitDialog中填写需要改变大小的对应控件的ID号: m_itemSize.AddItemRect(IDOK,this); m_itemSize.AddItemRect(IDC_LIST1,this); 此处的ID替换成对话框上实际的ID。 3、在OnSize函数中调用: m_itemSize.ResizeItem(); 功能实现完毕 类代码代码如下: 头文件: ItemResize.h #ifndefITEMRESIZE_H #defineITMERESIZE_H /************************************************************************/ /*作者:molin00@qq.com*/ /************************************************************************/ #include<stdio.h> #include<vector> usingnamespacestd; typedefstruct_RESIZEINFO { UINTnID; CWnd*pParent; floatfLeft; floatfRight; floatfTop; floatfBottom; }RESIZEINFO; classCItemResize { CRectm_rectDlg; //在窗口创建时,添加需要自动按比例调整大小的控件ID。 vector<RESIZEINFO>m_vResizeID; public: CItemResize(void); ~CItemResize(void); voidAddItemRect(UINTnID,CWnd*pParent); voidResizeItem(); }; #endif CPP文件: ItemResize.cpp //------------------------------------------------------------ /************************************************************************/ /*作者:molin00@qq.com*/ /************************************************************************/ #include"StdAfx.h" #include"ItemResize.h" CItemResize::CItemResize(void) { } CItemResize::~CItemResize(void) { } voidCItemResize::AddItemRect(UINTnID,CWnd*pParent) { RESIZEINFOrf={0}; rf.nID=nID; rf.pParent=pParent; CRectrect; pParent->GetClientRect(&m_rectDlg); CWnd*pItem=pParent->GetDlgItem(nID); ASSERT(pItem);//判断控件指针是否有效 pItem->GetWindowRect(&rect); pParent->ScreenToClient(&rect); rf.fLeft=(float)(rect.left)/(float)(m_rectDlg.Width()); rf.fRight=(float