此为我程序中的一个类,本用于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结构的停靠类型*/
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);
};
分享到:
相关推荐
然后在网上找到了控件适应窗口的程序,奈何还是没找到完全符合我要求的,于是还是自己来实现窗口自适应屏幕大小的功能吧。 我的最初想法是,我在oninit获取屏幕大小,然后调用窗口显示函数设置起点为0,0,窗口大小...
VC .NET 实现窗口内控件自适应屏幕尺寸大小而变化,这个具体点就是,窗口中的边框和按钮等元素,会随着窗口的变大自动变大,并保持原有的比例,调用了CSelfResizeWindow::Rectify()来实现,我觉得是个很实用的窗体...
此工程实现了MFC窗口控件随窗口大小进行自适应,封装了WidgetResize类用来调整控件大小位置,非常好用。
VC通用控件使用实例:各种控件的使用方法和技巧,通过源代码的形式来说明和讲解
VC 通用控件类的扩展 VC 通用控件类的扩展
VC通用控件使用实例及详解,基本上差不多的控件都已经包含在内了,希望对大家有用。
easysize_动态调整对话框控件位置和大小 方便界面的调整
基于TMS320VC5416的自适应有源噪声控制系统的设计与实现
VC常用控件 VC常用控件 VC常用控件
VC通用控件编程之CImageList控件.pdf
VC通用控件编程之CSlider控件,方法介绍。源码
VC通用控件的ppt,第12周
关于vc控件的的使用详解,是一个不错的入门资料
Static、Edit、Check Box、Radio等常用控件透明的方法,无需重写类,解决重影问题。 仅在VS2012下测试通过。
在VC6.0下实现控件随窗口同比例进行缩放,测试可用
vc 透明控件背景源码推荐vc 透明控件背景源码推荐vc 透明控件背景源码推荐vc 透明控件背景源码推荐vc 透明控件背景源码推荐vc 透明控件背景源码推荐
VC控件的使用方法说明,可以通过此轻松学习VC控件
vb6.0自适应窗体大小示例源代码(工程文件),附带文档介绍原理,针对少数、多数控件、含不希望调节尺寸的隐藏控件的处理方法。
VC串口控件编程 VC串口控件编程 VC串口控件编程 VC串口控件编程 VC串口控件编程 VC串口控件编程 VC串口控件编程 VC串口控件编程
VC 显示自适应大小的图片,在ImgView里显示一张自适应的图片,它使用了一个叫"CPicture"的类来封装IPicture。CPicture将一些麻烦的COM类型的参数映射为那些更容易被MFC程序员接受的类型,在CPicture里,你可以控制按...