MFC窗口控件随主窗口大小改变而伸缩
2017-08-27 09:42
811 查看
转载自:enter description here
头文件:
ItemResize.h
CPP文件:
ItemResize.cpp
=代码附件下载链接
一般情况下,我们新建的对话框,里面的“确定"和"取消”按钮,在对话框最大化的时候,不会一起变大的,而是保持原来的距离 而MFC默认不支持控件大小按比例缩放功能,当我们点击最大化按钮的时候,对话框会最大化,但是“确定”和“取消”不会跟着变大,如果对话框上面有很多个控件,界面机会变大很难看 我们可以采取下面的措施:对话框也是窗口,最大化是对窗口大小的改变,而在Windows message handle中有个WM_SIZE消息,该消息在窗口大小发生变化的时候会产生。那么我们可以根据这个消息,在窗口大小发生变化的时候,利用MoveWindow()函数来重新设置各个控件的大小。 在网上查了一些资料,都不方便使用,还需要自己写好多代码,在这里我封装了一个简单的类,可以实现这个功能: 用法是: 1:在对话框类(或者自定义主窗口类)的头文件中添加此类的对象CItemResize m_itemSize 2:在窗口初始化函数OnInitDialog中填写需要改变大小的对应控件的ID号 m_itemSize.AddItemRect(IDOK,this); m_itemSize AddItemRect(IDC_LIST,this); 此处的IDI替换成对话框上实际的ID 3:在OnSize函数中调用: m_itemSize.ResizeItem();
头文件:
ItemResize.h
#ifndef ITEMRESIZE_H #define ITEMRESIZE_H #include<vector> #include<stdio.h> using namespace std; typedef struct _RESIZEINFO { UINT nID; CWnd* pParent; float fLeft; float fRight; float fTop; float fBottom; }RESIZEINFO; class CItemResize { public: CRect m_rectDlg; //在窗口创建时,添加需要自动按比例调整大小的空间ID vector<RESIZEINFO> m_vResizeID; public: void ResizeItem(); void AddItemRect(UINT nID,CWnd* pParent); CItemResize(); virtual ~CItemResize(); }; #endif
CPP文件:
ItemResize.cpp
#include "stdafx.h" #include "ItemResize.h" CItemResize::CItemResize() { 4000 } CItemResize::~CItemResize() { } 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;i<m_vResizeID.size();i++) { m_vResizeID[i].pParent->GetClientRect(&m_rectDlg); CWnd* pItem=m_vResizeID[i].pParent->GetDlgItem(m_vResizeID[i].nID); if(pItem) { CRect rect; rect.left=(int)(m_rectDlg.Width()*m_vResizeID[i].fLeft); rect.right=(int)(m_rectDlg.Width()*m_vResizeID[i].fRight); rect.top=(int)(m_rectDlg.Height()*m_vResizeID[i].fTop); rect.bottom=(int)(m_rectDlg.Height()*m_vResizeID[i].fBottom); pItem->MoveWindow(rect); } } }
=代码附件下载链接
相关文章推荐
- MFC让控件随窗口大小而改变
- MFC----窗口的缩放及控件随拖动改变大小
- VC MFC 让窗口、控件随着主窗口大小改变而改变
- MFC 控件随窗口大小而改变
- VS2013 MFC 对话框控件大小随窗口大小改变而改变
- MFC——窗口的缩放及控件随拖动改变大小
- mfc中控件随着窗口的大小改变而改变大小
- 运行时改变控件的大小(点击后立刻ReleaseCapture,然后计算位移,最后发消息改变位置)——最有趣的是TPanel其实也有窗口标题,因此可发HTCAPTION消息
- MFC控件大小随窗体大小而改变
- mfc listcontrol控件改变字体大小
- 在DELPHI中让WindowsMediaPlayer控件随窗口改变大小。
- MFC窗口和控件大小等比例变化
- MFC API——》OnGetMinMaxInfo,当改变窗口大小时WM_GETMINMAXINFO
- MFC 改变控件字体大小
- MFC 控件随着对话框大小的改变而改变
- MFC窗体所有控件大小随窗体改变而改变
- MFC的控件大小如何随对话框改变
- 给对话框加载图片背景,使得窗口大小改变时,控件还在
- MFC中改变控件的大小和位置(zz)
- MFC禁止窗口最大化按钮和禁止改变窗口大小