//应群里兄弟需求,我自己依照他的工程设计自建了一个工程,有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", 风格值 + 颜色值)
结束
|