`
helpbs
  • 浏览: 1159091 次
文章分类
社区版块
存档分类
最新评论

VC通用控件自适应屏幕类

 
阅读更多

此为我程序中的一个类,本用于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));


自动调整控件位置(跟据设计时资源文件中控件的大小及位置):

<!--<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));

响应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);

响应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结构的停靠类型*/
typedef
enumWindowAnchorType
{
WAT_TOP
=0x0001,
WAT_LEFT
=0x0002,
WAT_RIGHT
=0x0004,
WAT_BOTTOM
=0x0008
};

/*控件定位描述信息*/
typedef
structWindowAnchorInfo{
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;

typedef
struct{
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);
};
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics