SystemParametersInfo (SPI_GETNONCLIENTMETRICS... 在VC 2008 里不能正常工作

在codeproject上面看见一个颜色选择控件CColourPopup, 地址是   http://www.codeproject.com/Articles/713/A-color-picker-button 

这里控件看到很多人再用, 但是在这个函数里面有点小问题

void CColourPopup::Initialise()
{//other code// Create the fontNONCLIENTMETRICS ncm;ncm.cbSize = sizeof(NONCLIENTMETRICS);VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0));m_Font.CreateFontIndirect(&(ncm.lfMessageFont));//other code}

上面这段代码在VC 6.0 中工作正常,但是在VC2008 + XP系统里面  SystemParametersInfo 返回 0, 因为VS2008默认你是面向Vista开发的软件,  GetLastError 返回的是 0

简单订正如下:

void CColourPopup::Initialise()
{//other code// Create the fontUINT size;NONCLIENTMETRICS ncm;ncm.cbSize = sizeof(NONCLIENTMETRICS);OSVERSIONINFO osv;osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);::GetVersionEx(&osv);if(osv.dwMajorVersion < 6)  //Vista以下的Windowsncm.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(ncm.iPaddedBorderWidth);size = ncm.cbSize;VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, size, &ncm, 0));m_Font.CreateFontIndirect(&(ncm.lfMessageFont));//other code}


实际是由于从 Vista 和 Windows Server 2008 开始 NONCLIENTMETRICS 在最后增加了iPaddedBorderWidth字段,如果你的程序打算同时支持 vista 或 XP ,Windows 2000, Windows Server 2003,那么应该先调用 GetVersionEx 检测Windows版本,然后决定是否需要减去 sizeof (ncms.iPaddedBorderWidth) ;


=====================================================================

NONCLIENTMETRICS 定义如下

typedef struct tagNONCLIENTMETRICSW
{UINT    cbSize;int     iBorderWidth;int     iScrollWidth;int     iScrollHeight;int     iCaptionWidth;int     iCaptionHeight;LOGFONTW lfCaptionFont;int     iSmCaptionWidth;int     iSmCaptionHeight;LOGFONTW lfSmCaptionFont;int     iMenuWidth;int     iMenuHeight;LOGFONTW lfMenuFont;LOGFONTW lfStatusFont;LOGFONTW lfMessageFont;
#if(WINVER >= 0x0600)int     iPaddedBorderWidth;
#endif /* WINVER >= 0x0600 */
}   NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, FAR* LPNONCLIENTMETRICSW;




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TFT_LCD液晶屏驱动设计与验证

TFT_LCD液晶屏驱动设计与验证 注:在本实验工程中,输出信号中包含 HV 同步模式下需要的行、场同步信号(hsync、 vsync)和 DE 同步模式下的 tft_de 信号,各信号正确输出。读者若想要使用 HV 同步模式进行图像显示,可在代码中注释掉 tft_de 信号;若想要使用 DE 同步模式进行图…

成吉思汗的子孙:中国游牧蒙古人

6月28日下午。大河画廊。内蒙古摄影家阿音题为“成吉思汗的子孙&#xff1a;中国游牧蒙古人”的个展。阿音&#xff0c;1970年出生于内蒙古。现居住在锡林郭勒盟的东乌珠穆沁旗。1989自学摄影。曾在国内外举办过多次摄影展&#xff0c;获得过2007年美国国家地理杂志世界纪实摄影…

保护Eclipse RCP应用的商业Java编译器

近日Excelsior LLC发布了最新版的Excelsior JET&#xff08;此前InfoQ对其做过介绍&#xff09;——Excelsior JET 6.5。该版本增加的一个主要特性就是处理Eclipse RCP应用的能力。\u0026#xD;\n凭借Excelsior JET&#xff0c;开发者可以将Eclipse RCP应用预编译为本地代码并分发…

ucos ii 文件分析

1. 平台介绍 本文档为基于uCOSII操作系统做开发的人员描述了一些uCOSII操作系统的基本特征。 1.1 结构图 图 1 整体结构图 2. 基本特征 2.1 uCOSII基本特征 uCOSII操作系统目前支持如下的基本特征&#xff1a; 1. 提供抢占式任务调度服务 2. 提供任务间同步与通信服务…

PJ Naughter's Freeware Library

http://www.codeproject.com/Articles/519/PJ-Naughter-s-Freeware-Library

FIFO求和实验

FIFO求和实验 实验目标:使用 Matlab 生成一个*.txt 文件,文件中包含模拟求和的数据, PC 机通过串口 RS232 将数据传给 FPGA,使用双 fifo 实现三行数据的 FIFO 求和,通过串口 RS232将求和后的数据回传给 PC 机,并通过串口助手打印出求和数据。 实验要求: *.txt 文件包含…

《老北大讲义》及其背后的故事

原北大校长胡适 不久前读到陈平原先生的一篇文章《早期北大文学史讲义三种》&#xff0c;该文对上世纪初北京大学的文科教学尤其是讲义的风行&#xff0c;做了非常细致的披露和分析。他说&#xff1a;&#xff08;老师授课&#xff09;“很少采纳通用教材&#xff0c;而喜欢临时…

日语过级 JLPT简介

JLPT(Japanese Language Proficiency Test),“日本语能力测试”是为了适应世界各国学习日语人数日渐增加的趋势&#xff0c;日本国际交流基金及其财团法人日本国际教育协会于1984年建立了一套较为完整的考试评价体系--日本语能力测试&#xff0c;并于同年开始在有关国家和地区实…

jtag相关

http://www.cnblogs.com/TaigaCon/archive/2012/12/20/2826941.html JTAG(Joint Test Action Group)联合测试行动小组)是一种国际标准测试协议&#xff08;IEEE 1149.1兼容&#xff09;&#xff0c;主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议&#xff0c;如DSP、…

为中国游牧蒙古人造像

第一次见到阿音&#xff0c;近距离地观看他的摄影&#xff0c;让我有一种愧疚感。作为蒙古人&#xff0c;在北京生活了30多年&#xff0c;我与自己民族的根和那片正在消逝的草原故地越来越疏远了。曾有人问我对故乡的理解&#xff0c;我说&#xff1a;我的故乡不过是记忆&#…

基于sobel算法的边缘检测设计与实现

基于sobel算法的边缘检测设计与实现 边缘是图像的基本特征。边缘检测针对的是灰度图像,目的是标识数字图像中灰度变化明显的点。 边缘检测的方法大致可以分为两类:基于查找的一类,通过寻找图像一阶导数中最大值和最小值来检测边界。 基于零穿越的一类,通过寻找图像二阶导数…

基于SPI协议的Flash全擦除

基于SPI协议的Flash全擦除 `timescale 1ns / 1ps module flash_be_ctrl(input wire sys_clk,//系统时钟频率50MHZ input wire sys_rst_n,//复位信号,低电平有效 input wire key,//按键输入信号 output reg cs_n,//片选信号 output reg sck,//串行时钟 output reg mosi //主输出…

单片机运行相关

1. 类似51&#xff0c;AVR这类的单片机&#xff0c;程序只能在ROM或FLASH里运行。STC的芯片一般是标准51或增强51&#xff0c;用的是FLASH&#xff0c;程序只能在FLASH中运行。2. ARM的程序即可以在FLASH里运行也可以在RAM里运行&#xff0c;不过能运行程序的FLASH只能使NorFla…

《心欢喜,灵快乐》出版

深圳女作家、画家崔文僮的散文绘画集出版。该书是她观察生活、体验人生、感悟艺术的真实记录。著名女作家徐小斌看了她的文章和绘画&#xff0c;写道&#xff1a;“‘生活家’这个概念令人非常感兴趣。文僮决定做一个‘有追求’的‘生活家’&#xff0c;这本身就十分有趣&#…

Sublime Text快捷命令

到页面底部&#xff1a;Ctrl End 这个快捷键可以将光标移动到当前页面的底部。 到页面顶部&#xff1a;Ctrl Home 这个快捷键可以将光标移动到当前页面的顶部。 批量注释&#xff1a;Ctrl / (Windows/Linux) 或 Cmd / (Mac) 这个快捷键可以在选中的行上添加或删除注释…

SPI-Flash页写实验

SPI-Flash页写实验 `timescale 1ns / 1ps module flash_pp_ctrl(input wire sys_clk,//系统时钟,频率50MHZ input wire sys_rst_n,//复位信号,低电平有效 input wire key,//按键输入信号 output reg cs_n,//片选信号 output reg sck,//串行时钟 output reg mosi //主输出从输…

散文绘画集《心欢喜,灵快乐》研讨会在京举行

中国作家网2009年07月28日15:53消息&#xff1a;7月28日&#xff0c;深圳女作家崔文僮创作的散文绘画集《心欢喜&#xff0c;灵快乐》研讨会在京举行。与会的评论家、画家和编辑们就崔文僮的散文和绘画进行了深入的分析和热烈讨论&#xff0c;专家们认为&#xff1a;作为一个非…

spi flash驱动

移植需要更改sendrcv函数里面内容&#xff0c;宏定义内容 #define DRV_SPI_FLASH_WRITE_ENABLE (0x06) //Write Enable #define DRV_SPI_FLASH_WRITE_DISABLE (0x04) //Write Disable #define DRV_SPI_FLASH_READ_STATUS_REG …

C++的int初始化

&#xfeff;int MyInt(56);std::cout<<"MyInt"<<MyInt<<std::endl;int MySecondInt int(); //int变量可以这样初始化std::cout<<MySecondInt<<std::endl;//那么可不可以这样初始化呢? int MyThirdInt(int());//error!!! now…

基于I2C协议的EEPROM驱动控制

基于I2C协议的EEPROM驱动控制 `timescale 1ns / 1ps module i2c_ctrl #(parameter DEVICE_ADDR = 7b1010_000,//i2c设备地址 parameter SYS_CLK_FREQ = 26d50_000_000,//输入系统时钟频率 parameter SCL_FREQ = 18d250_000 //i2c设备scl时钟频率 ) (input wire sys_clk,/…