此为我程序中的一个类,本用于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通用控件自适应屏幕类相关推荐

  1. 【免杀前置课——Windows编程】五、窗口控件——什么是控件、Windolws 窗口两大类、Windows标准控件/通用控件、控件响应的接收、创建窗口制作不同控件

    窗口控件 WINDOW控件 什么是控件? 控件是常见的窗口上的交互元素.例如:一个按钮,一个复选框,一个列表框等.当控件的特定功能被触发后,会主动发送消息通知父窗口,父窗口可以通过发送消息给控件控制控 ...

  2. vc picture控件的分类总结(转载)

    VC PICTURE控件的使用,如何加载背景图片 vc picture控件的分类总结: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定 ...

  3. vc picture控件载入背景图,随控件大小改变

    在mfc里,想要在Picture控件中载入一张图片有两种方法:静态的和动态的.静态的方法就是图片先载入资源(.rc)文件中,拥有一个唯一的ID:动态的方法就是制定图片的路径名即可. 当然这样的方法网上 ...

  4. VC++ OCX 控件注册

    转自:http://www.cctry.com/thread-5334-1-1.html 方法一:在dos或Windows命令行下运行:regsvr32 ocxname.ocx 注册 示例: regs ...

  5. java组件自适应窗口大小_java swing 窗口和控件自适应大小

    本文记录java开发CS结构时怎么自适应屏幕大小以及控件跟随frame大小变化大小.位置和字体大小 需要注意: 1.代码必须放置在其构造方法中.如:我的frame1是我frame.java的名,则代码 ...

  6. MFC—界面设计(控件自适应,添加背景图,Static背景颜色设置)

    1.控件随着窗口自适应 首先在类视图里面添加OnSize()函数,然后添加一个ChangeSize()函数,头文件中添加如下 //控件自适应变量POINT old;CRect m_rect;void ...

  7. VC++----ListBox控件的使用

    VC++----ListBox控件的使用_哈客部落 - 站长网部落 hake.cc 哈客站长网打造站长最好的部落 http://www.hake.cc/a/biancheng/ruanjian/vs/ ...

  8. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar

    原文:背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar [源码下载] 背水一战 Windows 10 (40) - 控件(导航类): AppBar, ...

  9. c语言 listview,C语言 SDK编程之通用控件的使用--ListView

    一.ListView控件属于通用控件CONTROL中的一种,在SDK编程方式时要使用通用控件 必须包含comctl32.dll,所以代码中要有头文件: commctrl.h    导入库:comctl ...

  10. 背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑

    背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 原文:背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 [源码 ...

最新文章

  1. PHP判断ajax请求:HTTP_X_REQUESTED_WITH
  2. Netty 4.1 Getting Start (翻译) + Demo
  3. 【Linux 内核 内存管理】RCU 机制 ④ ( RCU 模式下更新链表项 list_replace_rcu 函数 | 链表操作时使用 smp_wmb() 函数保证代码执行顺序 )
  4. 区块链实现代码详细分析(Python)
  5. uc3842改可调电源教程_明纬开关电源改可调详细教程
  6. 开源创新的理念_开源如何解决创新问题
  7. 无线设置 用户_【HIT每日学14】医院无线网络安全管理办法
  8. Json与List的相互转换 [谷歌的Gson.jar和阿里的fastJson.jar]
  9. FIND、FINDINDEX、INDEXOF、LASTINDEX、INCLUDES 数组五种查询条件方法介绍
  10. Java垃圾回收(GC)机制
  11. Win10下载的文件如何解除锁定?Win10系统解除锁定下载的文件方法
  12. 【gp数据库】十条实用数据库SQL优化建议
  13. 融合零样本学习和小样本学习的弱监督学习方法综述
  14. syntactic 与semantic 的区别
  15. 技术面试时该反问面试官什么问题?
  16. 使用计算机用眼卫生,电脑族日常保护眼睛小常识
  17. 计算机科学技术的广告语,让人动心的十大经典IT广告语
  18. MFC从字体名获取字库文件路径(从宋体获取到simsun.ttc)
  19. Android 手机红外遥控器实现
  20. WMI_04_常见的WMI类的属性

热门文章

  1. 2019基金行业变革之年
  2. 你得真心喜欢些什么,才能过好漫长的冬天
  3. (转)量化投资大师采访摘录-詹姆斯·西蒙斯 James Simons
  4. 原创 | 职场风云 (三)面对压力
  5. java实现复数之间加减乘运算_用java实现复数的加减乘除运算(改进第1次)
  6. 【人脸表情识别】基于matlab GUI LBP+SVM脸部动态特征人脸表情识别【含Matlab源码 1369期】
  7. 【三维路径规划】基于matlab粒子群算法无人机三维路径规划【含Matlab源码 1260期】
  8. 【图像压缩】基于matlab小波变换图像压缩【含Matlab源码 879期】
  9. 【图像去噪】基于matlab GUI均值+中值+空间+高斯滤波图像去噪【含Matlab源码 763期】
  10. 【图像分割】基于matlab蚁群优化模糊聚类图像分割【含Matlab源码 130期】