VC通用控件自适应屏幕类
2013-12-03 17:03
225 查看
文章来源:http://blog.csdn.net/achellies/article/details/4273035
注:转载文章仅是为了方便自己保存学习来提升自我。
此为我程序中的一个类,本用于WinCE,但在桌面系统上也同样适用!
使用方法(在WM_INITDIALOG或WM_CREATE消息中加入):
CWindowAnchor::BeginControlBound(hwnd)
手动调整控件位置:
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));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP|WAT_RIGHT));
响应WM_SIZE消息:
case WM_SIZE:
return HANDLE_WM_SIZE(hwndDlg,wParam,lParam,CWindowAnchor::OnSize);
响应WM_DESTROY消息:
CWindowAnchor::EndControlBound(hwnd);
代码:
注:转载文章仅是为了方便自己保存学习来提升自我。
此为我程序中的一个类,本用于WinCE,但在桌面系统上也同样适用!
使用方法(在WM_INITDIALOG或WM_CREATE消息中加入):
CWindowAnchor::BeginControlBound(hwnd)
手动调整控件位置:
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));
CWindowAnchor::AddControl(hwnd,IDC_STATIC1,&WindowAnchorInfo(WAT_LEFT|WAT_TOP|WAT_RIGHT));
响应WM_SIZE消息:
case WM_SIZE:
return HANDLE_WM_SIZE(hwndDlg,wParam,lParam,CWindowAnchor::OnSize);
响应WM_DESTROY消息:
CWindowAnchor::EndControlBound(hwnd);
代码:
#pragma once #include <map> #if defined (_MSC_VER) #pragma warning(disable: 4786) #endif /*用于WindowAnchorInfo结构的停靠类型*/ typedef enum WindowAnchorType { WAT_TOP=0x0001, WAT_LEFT=0x0002, WAT_RIGHT=0x0004, WAT_BOTTOM=0x0008 }; /*控件定位描述信息*/ typedef struct WindowAnchorInfo{ DWORD dwAnchor; //WAT_* RECT rcOriginalRect; //控件的原始边距,如果为空则自动获取(仅适用于WM_INIT中) WindowAnchorInfo(DWORD pAnchor=WAT_TOP|WAT_LEFT,LONG pLeft=0,LONG pTop=0,LONG pRight=0,LONG pBottom=0) { dwAnchor=pAnchor; rcOriginalRect.left=pLeft; rcOriginalRect.top=pTop; rcOriginalRect.right=pRight; rcOriginalRect.bottom=pBottom; }; }; typedef std::map<HWND,WindowAnchorInfo> ControlHashtable; typedef struct{ INT nWidth; //对话框宽度 INT nHeight; //对话框高度 INT nMinHeight; //对话框最小高度 ControlHashtable mapControls; //对话框所有子控件 }WindowAnchorDialog; /* * 对话框子控件定位 * 2009.03.29 By Frank */ static class CWindowAnchor { private: static BOOL _ReSize(HWND hwndDlg, const WindowAnchorDialog *wad, HWND hwndCtrl, const WindowAnchorInfo *wai); public: /* * 开始调整(此调用中会获取当前对话框的大小,如果在设计后要调整对话框大小,请先调用此方法) * hwndDlg:对话框句柄 */ static BOOL BeginControlBound(HWND hwndDlg); /* * 结束调整 * hwndDlg:对话框句柄 */ static BOOL EndControlBound(HWND hwndDlg); /* * 添加一个控件到调整列表 * hWndInsertAfter:HWND_BOTTOM |HWND_NOTOPMOST | HWND_TOP | HWND_TOPMOST |-2不改变 | Is Hwnd */ static BOOL AddControl(HWND hwndDlg, INT nCtrlID, WindowAnchorInfo *wai, HWND hWndInsertAfter=(HWND)-2); /* * 调整一个指定控件的大小 */ static BOOL ReSize(HWND hwndDlg, HWND hwndCtrl); /* * 响应WM_SIZE消息 */ static BOOL OnSize(HWND hwndDlg, UINT state, int cx, int cy); /*相应WM_VSCROLL消息*/ static BOOL OnVScroll(HWND hwnd, HWND hwndCtl, UINT code, int pos); };
相关文章推荐
- VC通用控件自适应屏幕类
- VC通用控件自适应屏幕类
- VC通用控件编程之CProgress控件
- VC通用控件编程之CImageList控件
- VC通用控件编程之CSlider控件
- VC通用控件编程之CSlider控件
- VC通用控件编程之CList控件
- 使用VC自绘美化通用控件
- 用VC++实现通用的报表控件
- VC通用控件编程之CImageList控件
- VC通用控件编程之CList控件
- VC++控件自适应屏幕的方法
- VC通用控件编程之CList控件
- VC CListCtrl控件的上移和下移的通用方法
- VC通用控件编程之CList控件
- VC通用控件编程之CImageList控件
- VC自绘美化通用控件
- VC++通用控件编程
- 模式对话框和通用控件(『VC++技术内幕』学习笔记(9))
- VC++通用控件编程