MFC一一窗口控件随窗口大小进行自适应
进行 控件 大小 窗口 mfc 适应 一一
2023-09-27 14:20:25 时间
通常,我们在将窗口进行最大化时会出现窗口中的控件自适应问题,如何让窗口中的所有控件跟随窗口做自适应变化,提供如下操作方法供参考
1、首先在OnInitDialog函数中获取窗口位置坐标
BOOL CDialogQual::OnInitDialog()
{
CDialogEx::OnInitDialog();
// TODO: 在此添加额外的初始化
CRect rect;
GetClientRect(&rect); //取客户区大小
old.x=rect.right-rect.left; //Point old,用于记录窗口原始坐标
old.y=rect.bottom-rect.top;
//如下代码用于窗口适应系统屏幕大小
// int cx = GetSystemMetrics(SM_CXFULLSCREEN);
// int cy = GetSystemMetrics(SM_CYFULLSCREEN);
// CRect rt;
// SystemParametersInfo(SPI_GETWORKAREA,0,&rt,0);
// cy = rt.bottom;
// MoveWindow(0, 0, cx, cy);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
2、在窗口变化Onsize函数中进行位置重置
void CDialogQual::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
if( nType != SIZE_MINIMIZED )
ReSize();
// TODO: 在此处添加消息处理程序代码
}
3、ReSize函数对所有控件进行布局
void CDialogQual::ReSize()
{
float fsp[2];
POINT Newp; //获取现在对话框的大小
CRect recta;
GetClientRect(&recta); //取客户区大小
Newp.x=recta.right-recta.left;
Newp.y=recta.bottom-recta.top;
fsp[0]=(float)Newp.x/old.x;
fsp[1]=(float)Newp.y/old.y;
CRect Rect;
int woc;
CPoint OldTLPoint,TLPoint; //左上角
CPoint OldBRPoint,BRPoint; //右下角
HWND hwndChild=::GetWindow(m_hWnd,GW_CHILD); //列出所有控件
while(hwndChild)
{
woc=::GetDlgCtrlID(hwndChild);//取得ID
GetDlgItem(woc)->GetWindowRect(Rect);
ScreenToClient(Rect);
OldTLPoint = Rect.TopLeft();
TLPoint.x = long(OldTLPoint.x*fsp[0]);
TLPoint.y = long(OldTLPoint.y*fsp[1]);
OldBRPoint = Rect.BottomRight();
BRPoint.x = long(OldBRPoint.x *fsp[0]);
BRPoint.y = long(OldBRPoint.y *fsp[1]);
Rect.SetRect(TLPoint,BRPoint);
GetDlgItem(woc)->MoveWindow(Rect,TRUE);
hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT);
}
old=Newp;
}
这样,经过上述变化后产生的效果图如下所示:
最大化前:
最大化后:
相关文章
- 关于C语言中不同类型数据进行计算 有符号和无符号数进行计算
- 对均匀采样信号进行重采样
- Android自定义控件ImageViwe(三)——随手指进行图片的缩放
- Web终端之使用shellinabox在浏览器进行ssh登录
- 应用谱减法进行语音去噪的算法研究
- WIN10系统使用自带软件进行L2TP over IPSec拨号时的配置示例
- 源码编译vi过程中进行配置时报“checking if compile and link flags for Python are sane... no: PYTHON DISABLED”怎么办?
- tomcat的catalina.out日志按自定义时间日式进行分割
- 录播为什么要用云台摄像机进行高清图像分析
- Qt音视频开发17-vlc内核回调拿图片进行绘制
- 自动判断网络连接状态,如断网则自动进行联网 (特定环境:某高校校园网)
- HTTP API领域在围绕OAS进行整合
- 如何进行数据变换(转)
- C#-将List里的集合转换成字符串并按指定的字符进行分隔?