VC-MFC对话框控件随窗口自动调整大小.docx_第1页
VC-MFC对话框控件随窗口自动调整大小.docx_第2页
VC-MFC对话框控件随窗口自动调整大小.docx_第3页
VC-MFC对话框控件随窗口自动调整大小.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

作者:一般情况下,我们新建的对话框,里面的“确定”和:取消”按钮,在对话框最大化得时候,不会一起变大的,而是保持原来的大小。而MFC默认不支持控件大小按比例缩放功能最简单的情况: 当我们点击最大化按钮的时候,对话框会最大化,但是控件“确定”和“取消”不会跟着变大。如果我们在对话框上面有多少控件,那么会很丑,而且很不实用,最大化本来就是想看的更清楚嘛。 我们可以采取下面的措施:对话框也是窗口,最大化是对窗口大小的改变,而在windows message handle中有个WM_SIZE的消息,该消息在窗口大小发生变化的时候会产生。那么我们可以根据这个消息,在窗口大小发生变化的时候,利用MoveWindow()函数来重新设置各个控件的大小。在网上查了一些资料,都不方便使用,还需要自己写好多代码。在这里我封装了一个简单的类,可以实现这个功能:用法是,1、在对话框类头文件中添加此类的对象CItemResize m_itemSize;2、在窗口初始化函数OnInitDialog中填写需要改变大小的对应控件的ID号:m_itemSize.AddItemRect(IDOK, this);m_itemSize.AddItemRect(IDC_LIST1, this);此处的ID替换成对话框上实际的ID。3、在OnSize函数中调用:m_itemSize.ResizeItem();功能实现完毕类代码代码如下:头文件:ItemResize.h#ifndef ITEMRESIZE_H#define ITMERESIZE_H/*/* 作者: */*/#include #include using namespace std;typedef struct _RESIZEINFOUINT nID;CWnd* pParent;float fLeft;float fRight;float fTop;float fBottom;RESIZEINFO;class CItemResizeCRect m_rectDlg;/在窗口创建时,添加需要自动按比例调整大小的控件ID。vector m_vResizeID;public:CItemResize(void);CItemResize(void);void AddItemRect(UINT nID, CWnd* pParent);void ResizeItem();#endifCPP文件:ItemResize.cpp/-/*/* 作者: */*/#include StdAfx.h#include ItemResize.hCItemResize:CItemResize(void)CItemResize:CItemResize(void)void CItemResize:AddItemRect( UINT nID, CWnd* pParent )RESIZEINFO rf = 0;rf.nID = nID;rf.pParent = pParent;CRect rect;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)(rect.right) / (float)(m_rectDlg.Width();rf.fTop = (float)(rect.top) / (float)(m_rectDlg.Height();rf.fBottom = (float)(rect.bottom) / (float)(m_rectDlg.Height();m_vResizeID.push_back(rf);void CItemResize:ResizeItem()for (UINT i=0; iGetClientRect(&m_rectDlg);CWnd *pItem = m_vResizeIDi.pParent-GetDlgItem(m_vResizeIDi.nID);if (pItem)CRect rect;rect.left = (int)(m_rectDlg.Width() * m_vResizeIDi.fLeft);rect.right = (int)(m_rectDlg.Width() * m_vResizeIDi.fRight);rect.top = (int)(m_rectDlg.Height() * m_vResi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论