此为我程序中的一个类,本用于WinCE,但在桌面系统上也同样适用!
使用方法(在WM_INITDIALOG或WM_CREATE消息中加入):
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CWindowAnchor::BeginControlBound(hwnd)
手动调整控件位置:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP,2,8,4,10));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP|WAT_RIGHT,2,20,4,10));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP,2,8,40,10));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP|WAT_RIGHT,2,20,4,10));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP,2,8,40,10));
自动调整控件位置(跟据设计时资源文件中控件的大小及位置):
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP|WAT_RIGHT));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP|WAT_RIGHT));
响应WM_SIZE消息:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->caseWM_SIZE:
returnHANDLE_WM_SIZE(hwndDlg,wParam,lParam,CWindowAnchor::OnSize);
returnHANDLE_WM_SIZE(hwndDlg,wParam,lParam,CWindowAnchor::OnSize);
响应WM_DESTROY消息:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CWindowAnchor::EndControlBound(hwnd);
代码:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#pragmaonce
#include<map>
#ifdefined(_MSC_VER)
#pragmawarning(disable:4786)
#endif
/*用于WindowAnchorInfo结构的停靠类型*/
typedefenumWindowAnchorType
{
WAT_TOP=0x0001,
WAT_LEFT=0x0002,
WAT_RIGHT=0x0004,
WAT_BOTTOM=0x0008
};
/*控件定位描述信息*/
typedefstructWindowAnchorInfo{
DWORDdwAnchor;//WAT_*
RECTrcOriginalRect;//控件的原始边距,如果为空则自动获取(仅适用于WM_INIT中)
WindowAnchorInfo(DWORDpAnchor=WAT_TOP|WAT_LEFT,LONGpLeft=0,LONGpTop=0,LONGpRight=0,LONGpBottom=0)
{
dwAnchor=pAnchor;
rcOriginalRect.left=pLeft;
rcOriginalRect.top=pTop;
rcOriginalRect.right=pRight;
rcOriginalRect.bottom=pBottom;
};
};
typedefstd::map<HWND,WindowAnchorInfo>ControlHashtable;
typedefstruct{
INTnWidth;//对话框宽度
INTnHeight;//对话框高度
INTnMinHeight;//对话框最小高度
ControlHashtablemapControls;//对话框所有子控件
}WindowAnchorDialog;
/*
*对话框子控件定位
*2009.03.29ByFrank
*/
staticclassCWindowAnchor
{
private:
staticBOOL_ReSize(HWNDhwndDlg,constWindowAnchorDialog*wad,HWNDhwndCtrl,constWindowAnchorInfo*wai);
public:
/*
*开始调整(此调用中会获取当前对话框的大小,如果在设计后要调整对话框大小,请先调用此方法)
*hwndDlg:对话框句柄
*/
staticBOOLBeginControlBound(HWNDhwndDlg);
/*
*结束调整
*hwndDlg:对话框句柄
*/
staticBOOLEndControlBound(HWNDhwndDlg);
/*
*添加一个控件到调整列表
*hWndInsertAfter:HWND_BOTTOM|HWND_NOTOPMOST|HWND_TOP|HWND_TOPMOST|-2不改变|IsHwnd
*/
staticBOOLAddControl(HWNDhwndDlg,INTnCtrlID,WindowAnchorInfo*wai,HWNDhWndInsertAfter=(HWND)-2);
/*
*调整一个指定控件的大小
*/
staticBOOLReSize(HWNDhwndDlg,HWNDhwndCtrl);
/*
*响应WM_SIZE消息
*/
staticBOOLOnSize(HWNDhwndDlg,UINTstate,intcx,intcy);
/*相应WM_VSCROLL消息*/
staticBOOLOnVScroll(HWNDhwnd,HWNDhwndCtl,UINTcode,intpos);
};
#include<map>
#ifdefined(_MSC_VER)
#pragmawarning(disable:4786)
#endif
/*用于WindowAnchorInfo结构的停靠类型*/
typedefenumWindowAnchorType
{
WAT_TOP=0x0001,
WAT_LEFT=0x0002,
WAT_RIGHT=0x0004,
WAT_BOTTOM=0x0008
};
/*控件定位描述信息*/
typedefstructWindowAnchorInfo{
DWORDdwAnchor;//WAT_*
RECTrcOriginalRect;//控件的原始边距,如果为空则自动获取(仅适用于WM_INIT中)
WindowAnchorInfo(DWORDpAnchor=WAT_TOP|WAT_LEFT,LONGpLeft=0,LONGpTop=0,LONGpRight=0,LONGpBottom=0)
{
dwAnchor=pAnchor;
rcOriginalRect.left=pLeft;
rcOriginalRect.top=pTop;
rcOriginalRect.right=pRight;
rcOriginalRect.bottom=pBottom;
};
};
typedefstd::map<HWND,WindowAnchorInfo>ControlHashtable;
typedefstruct{
INTnWidth;//对话框宽度
INTnHeight;//对话框高度
INTnMinHeight;//对话框最小高度
ControlHashtablemapControls;//对话框所有子控件
}WindowAnchorDialog;
/*
*对话框子控件定位
*2009.03.29ByFrank
*/
staticclassCWindowAnchor
{
private:
staticBOOL_ReSize(HWNDhwndDlg,constWindowAnchorDialog*wad,HWNDhwndCtrl,constWindowAnchorInfo*wai);
public:
/*
*开始调整(此调用中会获取当前对话框的大小,如果在设计后要调整对话框大小,请先调用此方法)
*hwndDlg:对话框句柄
*/
staticBOOLBeginControlBound(HWNDhwndDlg);
/*
*结束调整
*hwndDlg:对话框句柄
*/
staticBOOLEndControlBound(HWNDhwndDlg);
/*
*添加一个控件到调整列表
*hWndInsertAfter:HWND_BOTTOM|HWND_NOTOPMOST|HWND_TOP|HWND_TOPMOST|-2不改变|IsHwnd
*/
staticBOOLAddControl(HWNDhwndDlg,INTnCtrlID,WindowAnchorInfo*wai,HWNDhWndInsertAfter=(HWND)-2);
/*
*调整一个指定控件的大小
*/
staticBOOLReSize(HWNDhwndDlg,HWNDhwndCtrl);
/*
*响应WM_SIZE消息
*/
staticBOOLOnSize(HWNDhwndDlg,UINTstate,intcx,intcy);
/*相应WM_VSCROLL消息*/
staticBOOLOnVScroll(HWNDhwnd,HWNDhwndCtl,UINTcode,intpos);
};
1378

被折叠的 条评论
为什么被折叠?



