要讓對話方塊中的控制項隨著對話方塊大小的變化進行自動調整,是一件很頭疼的事情,需要在WM_SIZE的響應函數中對所有的控制項用MoveWindow()或者SetWindowPos()設定其變化比例,極其繁瑣。EasySize是一個很好解決方案,用一些宏封裝了內部的實現機制,使用起來方便快捷。原文地址:http://www.codeproject.com/KB/dialog/easysize.aspx
使用方法如下:
1.首先將EasySize.h拷貝到工程檔案夾中,然後在stdafx.h中包含該標頭檔:
#include "EasySize.h"
2.在對話方塊類聲明中添加DECLARE_EASYSIZE宏:
class CEasySizeDemoDlg : public CDialog
{
DECLARE_EASYSIZE
...
3.在OnInitDialog()函數中添加INIT_EASYSIZE宏(注意有分號):
BOOL CEasySizeDemoDlg::OnInitDialog()
{
CDialog::OnInitDialog();
...
INIT_EASYSIZE;
return TRUE; // return TRUE unless you set the focus to a control
}
4.響應WM_SIZE訊息,在響應函數中添加UPDATE_EASYSIZE宏(注意有分號):
void CEasySizeDemoDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
UPDATE_EASYSIZE;
}
5.如果需要限制對話方塊有一個最小尺寸,首先在資源檢視中為對話方塊添加上最大化最小化按鈕,然後Class Wizard中選擇Class Info標籤,在Message fileter下拉式清單中選擇Window,然後再點擊Message Maps標籤,就出現WM_SIZING訊息了,添加該訊息的響應函數:
void CEasySizeDemoDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
CDialog::OnSizing(fwSide, pRect);
EASYSIZE_MINSIZE(280,250,fwSide,pRect);
}
這樣就把對話方塊的最小尺寸限制在(280, 250)上了
6.添加控制項布局映射,放到訊息映射之後,基本格式如下:
BEGIN_EASYSIZE_MAP(class_name)
...
EASYSIZE(control,left,top,right,bottom,options)
...
END_EASYSIZE_MAP
class_name就是對話方塊類的類名
control是要設定的控制項的ID
left、top、right、bottom分別指的是該控制項左、上、右、下方的控制項的ID,也可以為以下特殊值:
ES_BORDER:保持與邊框距離不變
ES_KEEPSIZE:保持大小不變
所放位置:
left -- 表示和right指定的控制項靠右對齊
right -- 表示和left指定的控制項靠左對齊
top -- 表示和bottom指定的控制項上對齊
bottom -- 表示和top指定的控制項下對齊
options可指定為0,也可指定為以下值:
ES_HCENTER:保持寬度不變,水平位置在left和right指定的控制項正中間
ES_VCENTER:保持高度不變,垂直位置在left和right指定的控制項正中間