Windows XP下static控件文字显示为倾斜或是乱码的原因分析
来源:互联网 发布:vb 上月第一天 编辑:程序博客网 时间:2024/05/01 10:32
维护公司一个代码,开发环境在win7下的VS2008,Win7下面好好的,到了winxp下面static控件文字显示为倾斜文字或是乱码。按理来说,windows是会做一些向下兼容的,却出现这么离奇的问题。
一开始怀疑是style问题,用了ModifyStyle函数无效;
继而怀疑控件的各个属性为TRUE的选项,更改后依然无效;
没办法,只能注释掉无关代码,排查出出错范围,最后定位到Invalidate函数,进而怀疑自绘控件类的OnPaint函数问题。
知道问题所在后,一句一句分析观察,最后觉得VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));里的这个函数SystemParametersInfo不熟悉,尝试搜搜,百度了下发现还真是这个问题造成的。
附参考资料:SystemParametersInfo 关于VERIFY 出错
http://blog.csdn.net/dragoo1/article/details/8179636
xp sp3,vs2008
一个自定义继承与cdialog类,执行下面的代码报错
VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
原先在vs2003是好的,百度,
这是由于以前的工程迁移到Visual stutio 2008上,而本人所使用的是XP出现的问题。 这是由于Visual studio 2008里面默认的Windows 版本是vista,而自己现在使用的是XP而出现的。
因为在新的 Windows SDK 6.0 中,其定义如下:
typedef struct tagNONCLIENTMETRICSA{ UINT cbSize; int iBorderWidth; int iScrollWidth; int iScrollHeight; int iCaptionWidth; int iCaptionHeight; LOGFONTA lfCaptionFont; int iSmCaptionWidth; int iSmCaptionHeight; LOGFONTA lfSmCaptionFont; int iMenuWidth; int iMenuHeight; LOGFONTA lfMenuFont; LOGFONTA lfStatusFont; LOGFONTA lfMessageFont;#if(WINVER >= 0x0600) int iPaddedBorderWidth;#endif /* WINVER >= 0x0600 */}
解决办法:
(一)如果你想用nm.cbSize = sizeof (NONCLIENTMETRICS) ; 这个是低版本,通常所说的0x0501,就在stdafx.h中
#pragma once
#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
这个语句的后面加上以下2句
#ifndef WINVER // 允许使用特定于 Windows XP 或更高版本的功能。
#define WINVER 0x0501 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINNT // 允许使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 将此值更改为相应的值,以适用于 Windows 的其他版本。
#endif
- OSVERSIONINFOEX osvi;
- memset(&osvi, 0, sizeof(OSVERSIONINFOEX));
- osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
- if( !(GetVersionEx ((OSVERSIONINFO *) &osvi)) )
- {
- osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
- if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
- return;
- }
- NONCLIENTMETRICS ncm;
- if(osvi.dwMajorVersion <= 5 /*&& && osvi.dwMinorVersion == 1*/)//5000:2000,5001:xp,5002:win2003
- ncm.cbSize = sizeof(NONCLIENTMETRICS)- sizeof(ncm.iPaddedBorderWidth);
- else
- ncm.cbSize = sizeof(NONCLIENTMETRICS);
- VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));
参考:http://hi.baidu.com/vc_net/item/b8c5f761f70b9290c4d2494b
- Windows XP下static控件文字显示为倾斜或是乱码的原因分析
- 解决不同语言的XP系统下文字显示乱码的问题
- 关于CAD中不显示黑体或是黑体字显示为问号的原因
- 为Windows XP系统下的MFC控件提供xp风格
- EBS中HTML输出文字为乱码的原因
- ubuntu中文文件名在xp下显示为乱码的解决办法
- 控件不显示的原因分析
- tomcat 下jsp乱码的原因分析
- Windows Phone 的控件倾斜效果
- UITextField显示文字或是图片,类似的登录页面
- 在windows下编辑的MINIGUI的C程序,汉字显示为乱码解决方案
- 电脑中部分文字显示为乱码
- 【转】 【字符集】处理Toad显示乱码及Windows XP下无法插入“某些汉字”问题
- 【字符集UTF8】处理Toad显示乱码及Windows XP下无法插入“某些汉字”问题
- 转载:【字符集】处理Toad显示乱码及Windows XP下无法插入“某些汉字”问题
- 在windows下压缩后的zip包,在ubuntu下解压后显示为乱码问题
- linux下命令行下中文显示为乱码的解决方案
- 如何改变STATIC控件的文字颜色
- 【THUSC2016】蒟蒻的酱油记
- 俄罗斯轮盘赌
- 递归-文件结构“图”(算法基础 第3周)
- 使用Windbg解析dump文件 .
- STL容器
- Windows XP下static控件文字显示为倾斜或是乱码的原因分析
- 文件
- 图的邻接表表示及其深度优先搜索实现
- 友录(3)图像异步加载
- Java 内存区域和GC机制
- 网络检测
- 主动轮廓线模型Snake模型简介&openCV中cvSnakeImage()函数代码分析
- JavaScript学习随记——面向对象编程(继承)
- 之字形打印矩阵