TC官方合作论坛

 找回密码
 立即注册
查看: 459|回复: 1

[界面] 窗口拉伸及同步控件字体大小缩放[含工程文件]

[复制链接]
发表于 2024-1-9 02:35:11 | 显示全部楼层 |阅读模式
//应群里兄弟需求,我自己依照他的工程设计自建了一个工程,有9个代码特征:
//一、先定义各种类型控件的句柄数组,控件原始大小数组,控件原始字体参数数组,因为要初始化要遍历所有控件句柄并存入数组中,
变量 终端档案句柄, 父窗W, 父窗H, 历史主窗大小, 分辨W, 分辨H, 控件类型数组 = 数组("信标", "抬标", "编辑", "分组")
变量 信标句柄数组 = 数组(), 抬标句柄数组 = 数组(), 编辑句柄数组 = 数组(), 分组句柄数组 = 数组()
变量 信标大小数组 = 数组(), 抬标大小数组 = 数组(), 编辑大小数组 = 数组(), 分组大小数组 = 数组()
变量 信标字体数组 = 数组("字高" = 12.0, "字宽" = 6.0, "粗细" = 400, "字形" = "宋体") //信息标签 原始设计参数
变量 抬标字体数组 = 数组("字高" = 16.0, "字宽" = 8.0, "粗细" = 800, "字形" = "宋体") //抬头标签 原始设计参数
变量 编辑字体数组 = 数组("字高" = 16.0, "字宽" = 8.0, "粗细" = 400, "字形" = "宋体") //编辑框 原始设计参数
变量 分组字体数组 = 数组("字高" = 20.0, "字宽" = 10.0, "粗细" = 600, "字形" = "宋体") //分组框 原始设计参数
功能 字体缩放测试_初始化()
    终端档案句柄 = 窗口获取自我句柄()
    窗口获取大小(终端档案句柄, 父窗W, 父窗H)
    窗口拉伸激活程序(0, #40000) //0备用参数 窗口句柄
    历史主窗大小 = 数组(父窗W, 父窗H)
    变量 位置X, 位置Y, 宽值, 高值, 设定X, 设定Y
//二、首次加载时设定一次所有控件的字体,但不设置控件的大小和位置,
    遍历(变量 控件号 = 0; 控件号 < 3; 控件号++)
        分组句柄数组[控件号] = 控件获取句柄("抬头分组" & 控件号)
        窗口获取客户区(分组句柄数组[控件号], 位置X, 位置Y, 宽值, 高值)
        窗口屏幕转客户区(终端档案句柄, 位置X, 位置Y, 设定X, 设定Y)
        分组大小数组[控件号] = 数组(宽值, 高值, 设定X, 设定Y, 宽值 * 2.0, 宽值 / 2.0, 高值 * 2.0, 高值 / 2.0) //三、存入控件的基本位置和宽高值,并设定上限大于2倍的宽高和小于2倍的宽高
        字体大小缩放程序(数组(分组句柄数组[控件号], 分组字体数组["字高"], 分组字体数组["字宽"], 分组字体数组["粗细"], 分组字体数组["字形"], 分组框获取文本("抬头分组" & 控件号))) //首次加载设定
    结束
    遍历(变量 控件号 = 0; 控件号 < 14; 控件号++)
        信标句柄数组[控件号] = 控件获取句柄("信息标签" & 控件号)
        窗口获取客户区(信标句柄数组[控件号], 位置X, 位置Y, 宽值, 高值)
        窗口屏幕转客户区(终端档案句柄, 位置X, 位置Y, 设定X, 设定Y)
        信标大小数组[控件号] = 数组(宽值, 高值, 设定X, 设定Y, 宽值 * 2.0, 宽值 / 2.0, 高值 * 2.0, 高值 / 2.0) //三、存入控件的基本位置和宽高值,并设定上限大于2倍的宽高和小于2倍的宽高
        字体大小缩放程序(数组(信标句柄数组[控件号], 信标字体数组["字高"], 信标字体数组["字宽"], 信标字体数组["粗细"], 信标字体数组["字形"], 标签获取文本("信息标签" & 控件号))) //首次加载设定
        窗口发送消息(信标句柄数组[控件号], 12, 0, 标签获取文本("信息标签" & 控件号)) //标签较为特殊需要用12号消息重设文字内容 //首次加载设定
    结束
    遍历(变量 控件号 = 0; 控件号 < 2; 控件号++)
        抬标句柄数组[控件号] = 控件获取句柄("抬头标签" & 控件号)
        窗口获取客户区(抬标句柄数组[控件号], 位置X, 位置Y, 宽值, 高值)
        窗口屏幕转客户区(终端档案句柄, 位置X, 位置Y, 设定X, 设定Y)
        抬标大小数组[控件号] = 数组(宽值, 高值, 设定X, 设定Y, 宽值 * 2.0, 宽值 / 2.0, 高值 * 2.0, 高值 / 2.0) //三、存入控件的基本位置和宽高值,并设定上限大于2倍的宽高和小于2倍的宽高
        字体大小缩放程序(数组(抬标句柄数组[控件号], 抬标字体数组["字高"], 抬标字体数组["字宽"], 抬标字体数组["粗细"], 抬标字体数组["字形"], 标签获取文本("抬头标签" & 控件号))) //首次加载设定
        窗口发送消息(抬标句柄数组[控件号], 12, 0, 标签获取文本("抬头标签" & 控件号)) //标签较为特殊需要用12号消息重设文字内容 //首次加载设定
    结束
    遍历(变量 控件号 = 0; 控件号 < 2; 控件号++)
        编辑句柄数组[控件号] = 控件获取句柄("抬头编辑" & 控件号)
        窗口获取客户区(编辑句柄数组[控件号], 位置X, 位置Y, 宽值, 高值)
        窗口屏幕转客户区(终端档案句柄, 位置X, 位置Y, 设定X, 设定Y)
        编辑大小数组[控件号] = 数组(宽值, 高值, 设定X, 设定Y, 宽值 * 2.0, 宽值 / 2.0, 高值 * 2.0, 高值 / 2.0) //三、存入控件的基本位置和宽高值,并设定上限大于2倍的宽高和小于2倍的宽高
        字体大小缩放程序(数组(编辑句柄数组[控件号], 编辑字体数组["字高"], 编辑字体数组["字宽"], 编辑字体数组["粗细"], 编辑字体数组["字形"], 编辑框获取文本("抬头编辑" & 控件号))) //首次加载设定
        窗口设置焦点(编辑句柄数组[控件号])
    结束
结束

功能 字体缩放测试_消息路由(句柄, 消息, w参数, l参数, 时间, x坐标, y坐标)
    选择(消息)
        条件 512
        变量 分组索引, 信标索引, 抬标索引
        分组索引 = 数组值查找(分组句柄数组, 句柄, 1)
        信标索引 = 数组值查找(信标句柄数组, 句柄, 1)
        抬标索引 = 数组值查找(抬标句柄数组, 句柄, 1)
        如果(句柄 == 终端档案句柄 || 分组索引 > -1 || 信标索引 > -1 || 抬标索引 > -1)
            缩放按住拖动程序()
        结束
        条件 161 //非客户区移动 //四、鼠标在非客户区内移动时就需要判断是否需要执行缩放
        变量 当前W, 当前H
        窗口获取大小(终端档案句柄, 当前W, 当前H)
        如果(当前W != 父窗W || 当前H != 父窗H)
            控件大小缩放程序(当前W, 当前H)
        结束
        条件 160 //非客户区按下 //四、鼠标在非客户区内按下时也需要判断是否需要执行缩放
        变量 当前W, 当前H
        窗口获取大小(终端档案句柄, 当前W, 当前H)
        如果(当前W != 父窗W || 当前H != 父窗H)
            控件大小缩放程序(当前W, 当前H)
        结束
    结束
    返回 假
结束
功能 字体缩放测试_消息过程(消息, w参数, l参数)
    选择(消息)
        条件 29697 //五、因为标签重绘后的效果会因为窗口缩小后不会恢复,所以这里强制采用了消息过程来恢复标签的重绘效果
        变量 当前W, 当前H
        窗口获取大小(终端档案句柄, 当前W, 当前H)
        如果(当前W != 父窗W || 当前H != 父窗H)
            控件大小缩放程序(当前W, 当前H)
        结束
        条件 274 //五、因为标签重绘后的效果会因为窗口缩小后不会恢复,所以这里强制采用了消息过程来恢复标签的重绘效果
        变量 当前W, 当前H
        窗口获取大小(终端档案句柄, 当前W, 当前H)
        如果(当前W != 父窗W || 当前H != 父窗H)
            选择(w参数)
                条件 61472 //最小化 //五、因为标签重绘后的效果会因为窗口缩小后不会恢复,所以这里强制采用了消息过程来恢复标签的重绘效果
                控件大小缩放程序(当前W, 当前H)
                条件 61488 //最大化 //五、因为标签重绘后的效果会因为窗口缩小后不会恢复,所以这里强制采用了消息过程来恢复标签的重绘效果
                控件大小缩放程序(当前W, 当前H)
                条件 61728 //初始化 //五、因为标签重绘后的效果会因为窗口缩小后不会恢复,所以这里强制采用了消息过程来恢复标签的重绘效果
                控件大小缩放程序(当前W, 当前H)
            结束
        结束
    结束
结束
功能 缩放按住拖动程序() //六、为了方便在窗体内部也能拖动窗体而设置的代码
    动态库调用("user32.dll", "Long", "ReleaseCapture")
    动态库调用("user32.dll", "Long", "SendMessageA", "Long", 终端档案句柄, "Long", 161, "Long", 2, "Long", 1)
结束
功能 控件大小缩放程序(主窗W, 主窗H)
    如果(主窗W != 历史主窗大小[0] || 主窗H != 历史主窗大小[1])
        变量 倍率W, 倍率H, 设定W, 设定H
        倍率W = 转浮点型(主窗W) / 转浮点型(父窗W)
        倍率H = 转浮点型(主窗H) / 转浮点型(父窗H)
        遍历(变量 类型组 = 0; 类型组 < 4; 类型组++)
            选择(控件类型数组[类型组])
                条件 "分组"
                遍历(变量 控件号 = 0; 控件号 < 3; 控件号++) //七、遍历指定数量的控件 并采用 窗口历史大小与窗口原始大小的倍率,来乘以控件的大小,宽与高分开判断
                    设定W = 分组大小数组[控件号][0] * 倍率W
                    设定H = 分组大小数组[控件号][1] * 倍率H
                    如果(设定W > 分组大小数组[控件号][4]) //七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定W = 分组大小数组[控件号][4]
                    否则如果(设定W < 分组大小数组[控件号][5])
                        设定W = 分组大小数组[控件号][5]
                    结束
                    如果(设定H > 分组大小数组[控件号][6])//七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定H = 分组大小数组[控件号][6]
                    否则如果(设定H < 分组大小数组[控件号][7])
                        设定H = 分组大小数组[控件号][7]
                    结束
                    控件设置位置("抬头分组" & 控件号, 分组大小数组[控件号][2], 分组大小数组[控件号][3] * 倍率H, 设定W, 设定H, 0) //拉伸变化设定
                    字体大小缩放程序(数组(分组句柄数组[控件号], 分组字体数组["字高"] * 倍率W, 分组字体数组["字宽"] * 倍率H, 分组字体数组["粗细"], 分组字体数组["字形"], 分组框获取文本("抬头分组" & 控件号))) //拉伸变化设定
                结束
                条件 "信标"
                遍历(变量 控件号 = 0; 控件号 < 14; 控件号++) //七、遍历指定数量的控件 并采用 窗口历史大小与窗口原始大小的倍率,来乘以控件的大小,宽与高分开判断
                    设定W = 信标大小数组[控件号][0] * 倍率W
                    设定H = 信标大小数组[控件号][1] * 倍率H
                    如果(设定W > 信标大小数组[控件号][4])//七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定W = 信标大小数组[控件号][4]
                    否则如果(设定W < 信标大小数组[控件号][5])
                        设定W = 信标大小数组[控件号][5]
                    结束
                    如果(设定H > 信标大小数组[控件号][6])        //七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定H = 信标大小数组[控件号][6]
                    否则如果(设定H < 信标大小数组[控件号][7])
                        设定H = 信标大小数组[控件号][7]
                    结束
                    如果(控件号 == 0 || 控件号 == 2 || 控件号 == 4 || 控件号 == 6 || 控件号 == 8 || 控件号 == 10 || 控件号 == 12)
                        控件设置位置("信息标签" & 控件号, 信标大小数组[控件号][2], 信标大小数组[控件号][3] * 倍率H, 设定W, 设定H, 0) //拉伸变化设定
                    否则
                        控件设置位置("信息标签" & 控件号, 信标大小数组[控件号][2] * 倍率W, 信标大小数组[控件号][3] * 倍率H, 设定W, 设定H, 0) //拉伸变化设定
                    结束
                    字体大小缩放程序(数组(信标句柄数组[控件号], 信标字体数组["字高"] * 倍率W, 信标字体数组["字宽"] * 倍率H, 信标字体数组["粗细"], 信标字体数组["字形"], 标签获取文本("信息标签" & 控件号))) //拉伸变化设定
                    变量 返回值 = 窗口发送消息(信标句柄数组[控件号], 312, 0, 0)
                    窗口发送消息(信标句柄数组[控件号], 12, 返回值, 标签获取文本("信息标签" & 控件号)) //标签较为特殊需要用12号消息重设文字内容 //拉伸变化设定
                结束
                条件 "抬标"
                遍历(变量 控件号 = 0; 控件号 < 2; 控件号++) //七、遍历指定数量的控件 并采用 窗口历史大小与窗口原始大小的倍率,来乘以控件的大小,宽与高分开判断
                    设定W = 抬标大小数组[控件号][0] * 倍率W
                    设定H = 抬标大小数组[控件号][1] * 倍率H
                    如果(设定W > 抬标大小数组[控件号][4])//七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定W = 抬标大小数组[控件号][4]
                    否则如果(设定W < 抬标大小数组[控件号][5])
                        设定W = 抬标大小数组[控件号][5]
                    结束
                    如果(设定H > 抬标大小数组[控件号][6])//七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定H = 抬标大小数组[控件号][6]
                    否则如果(设定H < 抬标大小数组[控件号][7])
                        设定H = 抬标大小数组[控件号][7]
                    结束
                    如果(控件号 == 0)
                        控件设置位置("抬头标签" & 控件号, 抬标大小数组[控件号][2], 抬标大小数组[控件号][3], 设定W, 设定H, 2) //拉伸变化设定
                    否则
                        控件设置位置("抬头标签" & 控件号, 抬标大小数组[控件号][2] * 倍率W, 抬标大小数组[控件号][3], 设定W, 设定H, 0) //拉伸变化设定
                    结束
                    字体大小缩放程序(数组(抬标句柄数组[控件号], 抬标字体数组["字高"] * 倍率W, 抬标字体数组["字宽"] * 倍率H, 抬标字体数组["粗细"], 抬标字体数组["字形"], 标签获取文本("抬头标签" & 控件号))) //拉伸变化设定
                    变量 返回值 = 窗口发送消息(信标句柄数组[控件号], 312, 0, 0)
                    窗口发送消息(抬标句柄数组[控件号], 12, 返回值, 标签获取文本("抬头标签" & 控件号)) //标签较为特殊需要用12号消息重设文字内容 //拉伸变化设定
                结束
                条件 "编辑"
                遍历(变量 控件号 = 0; 控件号 < 2; 控件号++) //七、遍历指定数量的控件 并采用 窗口历史大小与窗口原始大小的倍率,来乘以控件的大小,宽与高分开判断
                    设定W = 编辑大小数组[控件号][0] * 倍率W
                    设定H = 编辑大小数组[控件号][1] * 倍率H
                    如果(设定W > 编辑大小数组[控件号][4])//七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定W = 编辑大小数组[控件号][4]
                    否则如果(设定W < 编辑大小数组[控件号][5])
                        设定W = 编辑大小数组[控件号][5]
                    结束
                    如果(设定H > 编辑大小数组[控件号][6])//七-1、判断换算后的设定宽和设定高是否超过了 预存数组中的2倍宽高,或者小于预存数组中的2倍宽高,如果超出或者小于了,就以预存的下限值或上限值来限定要设定的宽高值
                        设定H = 编辑大小数组[控件号][6]
                    否则如果(设定H < 编辑大小数组[控件号][7])
                        设定H = 编辑大小数组[控件号][7]
                    结束
                    控件设置位置("抬头编辑" & 控件号, 编辑大小数组[控件号][2] * 倍率W, 编辑大小数组[控件号][3], 设定W, 设定H, 0) //拉伸变化设定
                    字体大小缩放程序(数组(编辑句柄数组[控件号], 编辑字体数组["字高"] * 倍率W, 编辑字体数组["字宽"] * 倍率H, 编辑字体数组["粗细"], 编辑字体数组["字形"], 编辑框获取文本("抬头编辑" & 控件号))) //拉伸变化设定
                    窗口设置焦点(编辑句柄数组[控件号])
                结束
            结束
        结束
        历史主窗大小 = 数组(主窗W, 主窗H)
    结束
结束
//八、代入设定的字体参数数组来创建字体并返回画笔句柄 投递消息到控件句柄 从而实现字体的重绘变化
功能 字体大小缩放程序(字体样式数组)
    变量 字体句柄, DEFAULT_CHARSET = 1, CLIP_CHARACTER_PRECIS = 1, OUT_TT_ONLY_PRECIS = 7, DEFAULT_QUALITY = 0, FF_DONTCARE = 0
    字体句柄 = 动态库调用("gdi32.dll", "long", "CreateFontW", "long", 字体样式数组[1], "long", 字体样式数组[2], "long", 0, "long", 0, "long", 字体样式数组[3], "long", 0, "long", 0, "long", 0, "long", DEFAULT_CHARSET, "long", OUT_TT_ONLY_PRECIS, "long", CLIP_CHARACTER_PRECIS, "long", DEFAULT_QUALITY, "long", FF_DONTCARE, "wchar *", 字体样式数组[4])
    窗口发送消息(字体样式数组[0], 48, 字体句柄, 字体样式数组[5])
结束
//九、程序初始化时就调用该函数,以激活窗口风格,才可以进行窗口拉伸
功能 窗口拉伸激活程序(窗口句柄, 颜色值) //窗口句柄 备用参数
    变量 风格值 = 动态库调用("user32.dll", "int", "GetWindowLongA", "int", 终端档案句柄, "int", -16)
    动态库调用("user32.dll", "int", "SetWindowLongA", "int", 终端档案句柄, "int", -16, "int", 风格值 + 颜色值)
结束

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 3威望 +12 金币 +12 收起 理由
cdthinker + 1 + 1 很给力!
yuzhiboqianyuan + 1 + 1 很给力!
cjxdn + 10 + 10 很给力!

查看全部评分

回复

使用道具 举报

发表于 2024-1-11 20:09:17 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-4-29 01:54 , Processed in 0.052960 second(s), 26 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表