VC6/VS6定制应用程序按键与贴图错位问题的排查及解决

news/2024/11/16 6:35:25/

一款老旧定制应用程序,使用VC6.0在WinXP平台开发,一直运行于WinXP SP1操作系统。

原来运行的计算机硬盘坏掉之后,更换了新计算机,安装了WinXP SP3,运行该定制程序发现程序主界面(模态对话框窗口)按键贴图与按键响应位置存在较大偏差,导致按键的点击操作与界面显示的按键(贴图)位置不一致,严重影响正常使用。

初步分析觉得,图片尺寸是不会变的,图片在显示贴图过程中的处理逻辑也不会改变,应该是对话框显示尺寸发生了变化,导致对应的按钮等操作控件位置随之发生变动,最终使得显示的按钮与对应的操作位置(按钮控件实际的显示位置)发生了错位。

调整系统界面字体和字号,错位量变化,但均达不到二者完全对应的程度。咨询一位资深大佬,大佬答复也应该是这个原因。反复调整无果。

考虑更换系统。应用程序与硬件相关的只有一个多串口卡,而且找到了多串口卡的Windows7 x86_64驱动(这个厂商值得表扬,各型号板卡各种平台各种版本的驱动官网上均提供了下载,它就是MOXA),重装系统为Windows7 x86_64 旗舰版,安装硬件驱动一次通过,运行应用程序,现象依旧。

准备从源代码下手修正这个偏差,幸而源代码在十多年后的今天竟然找到了,但需要安装老旧的Visual Studio 6,幸好手头存有一份(自我表扬一下),免除了网上百般down千般试的劳顿。

安装过程中提示VS6与Win7不兼容,一路忽略这种提示,直至安装完成。

将源代码另复制一份作为试验品(要给自己留足后悔药!!!)。

运行VS6,正常进入,打开应用程序的.dsw文件,编译,报错:

“...\..\... ... ...\AFXMEM.CPP 没有发现。”

以关键字“AFXMEM.CPP”问度娘,出现的只有关于 afxmem.obj 的答案。

以关键字“AFXMEM.H”问度娘,亦然。

看来AFXMEM基本不会出现问题。

灵机一动,是不是与编译环境设置中的路径参数相关?

菜单 -> Tools -> Options

弹出对话框,选择Directories标签,如下图,有路径设置(此图是修改路径后的)

路径显示为 C:\Program Files (x86) \...

想起来,VS6是32位程序,操作系统为64位Windows7,自动安装路径为C:\Program Files (x86) \下,

但估计 VS6 开发较早,其认为自己的安装路径为C:\Program Files\ 下,这里出现了差错。

关闭VS6,将VS6所在的整个文件夹从C:\Program Files (x86) \ 下剪切到C:\Program Files\ 下,

运行VS6,打开工程,将所有与 C:\Program Files (x86) \ 有关的路径参数都修改为 C:\Program Files\

具体见下图,红框内的4中类别都要检查修改:

打开应用程序工程,编译通过。

注:此时开始菜单中的VS6相关入口保存的仍是 C:\Program Files (x86) \ 路径下的快捷方式,虽然点击也可以运行,但显示不出程序图标,看着不爽,逐一右键,修改路径为新路径 C:\Program Files\,程序图标可以正常显示。

回头再看应用程序对话框资源相关设置,按钮贴图和实际响应位置错位的主对话框设定的字体为“幼圆”字号8,但当前系统中没有幼圆字体,更改为系统中已有的“宋体”,字号不变,重新编译运行,按钮贴图和响应位置一致。问题原因找到。

逐一检查所有的对话框,问题解决。

 

事件回顾 >>>>>>

基本情况:应用程序采用VC6开发,主界面为模态对话框,为了界面美观,采用贴图方式,进行美化。

该对话框选择了开发机上有的“幼圆”字体,并在此字体及所选择的字号下设定了对话框尺寸及所包含的按钮等控件的位置,以与设计的贴图保持位置上的对应。

隐含前提:如果系统不存在“幼圆”字体,系统会自动寻找最相近的字体进行替代。如果替代字体与原设定字体“幼圆”在相同字号下的大小有别,对话框会相应的自动调整尺寸,导致错位。

如果事先知道是缺少所需的字体导致的,只需在目标计算机上安装所需要的字体文件即可。

绕了一大圈,找到了原因,也算是个有益的体验。

 

身为码农,不得不慎重、不得不缜密,谁知道哪个地方有虫子在等着看码农的笑话呢 :)

 

 

 


http://www.ppmy.cn/news/303985.html

相关文章

佳能2545i打印机驱动安装问题

记录一个打印机驱动安装的问题,起初在佳能售后官网下载了第一个驱动Generic PCL6 -2.86这个版本,但是装上之后没有效果,就很奇怪,然后询问了同事说是下载UFRII LT这个版本的就可以,最终成功打印,由衷的的感…

hdu2545(简单并查集)

树上战争 Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 543 Accepted Submission(s): 290 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid2545 Problem Description 给一棵树&#xff0c…

hdu 2545

链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2545 并查集解决. AC code: #include <iostream> #include <stdio.h> using namespace std; #define Max 100001 int father[Max]; void Init() {int i;for(i0;i<Max;i)father[i]i; }int Findfat…

ZSTU2545-地道战

http://acmpj.zstu.edu.cn/JudgeOnline/showproblem?problem_id2545 呵呵。。。呵呵。。。呵呵。。。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main(void) {int n,m,i,j,k,g,dp[120][120],x[120][120],y[120][12…

ZOJ 2545 Factstone Benchmark

求最大的n 满足n! < 2 ^k 2 ^ k 不会太大,所以可以直接暴力上去. 设2 ^ k 为p 则有:n! < p ---> log2(n!) < log2(p) ---> log(n!) < p ---> log2(1) log(2) log(3) .... log2(n) < p #include <iostream> #include <cstdio> #incl…

HDU2545:树上战争(并查集)

树上战争 Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1012 Accepted Submission(s): 572 Problem Description 给一棵树&#xff0c;如果树上的某个节点被某个人占据&#xff0c;则它的所有儿子都被占据…

2545: 内部收益率

2545: 内部收益率 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 25 Solved: 8 [ Submit][ Status][ Web Board] Description 在金融中&#xff0c;我们有时会用内部收益率IRR来评价项目的投资财务效益&#xff0c;它等于使得投资净现值NPV等于0的贴现率。换句话说&#x…

【光学】基于matlab GUI维达尔之眼计算【含Matlab源码 2545期】

⛄一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【光学】基于matlab GUI维达尔之眼计算【含Matlab源码 2545期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏Matlab物理应用(初级版) 备注: 点击上面蓝色字体付费专栏Matlab物理应用(…