关于BCMenu在VC6和Vc9,VC2008一些用法差异
来源:互联网 发布:photo shop mac破解版 编辑:程序博客网 时间:2024/04/30 13:42
最近引用了一个自绘菜单BCMenu类,发现其在VC6运行没有什么差错,在vs2008环境下就会报错,
错误来源来自BCMenu.cpp 1781行
VERIFY (SystemParametersInfo (SPI_GETNONCLIENTMETRICS,nm.cbSize,&nm,0));
感觉可能是编译环境差异造成的,于是通过查找资料,果然有类似的解决方法,在百度博客中
一名为 乘客 的大侠给做了如下解释,非常详细,也算给遇到这方面问题的朋友有个借鉴!可惜我的英文不怎么好,但也明白了错误的大概,其原文如下:
iPaddedBorderWidth The thickness of the padded border, in pixels. The default value is 4 pixels. The iPaddedBorderWidth and iBorderWidth members are combined for both resizable and nonresizable windows in the Windows Aero desktop experience. To compile an application that uses this member, define _WIN32_WINNT as 0x0600 or later. For more information, see Remarks. Windows Server 2003 and Windows XP/2000: This member is not supported. http://msdn.microsoft.com/en-us/library/ms724506(VS.85).aspx
////////////////////////////////////////////////////////////////////////////////////////
而我的本地的MSDN只有
/////////////////////////
iPaddedBorderWidth TBD ms-help://MS.MSDNQTR.v90.chs/sysinfo/base/nonclientmetrics_str.htm
/////////////////////
根本就不知道TBD是个啥... 看看头文件的定义
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 */
}
NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, FAR* LPNONCLIENTMETRICSA;
解决方案 要么把WINVER小于0x600 要么直接
NONCLIENTMETRICS.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(NONCLIENTMETRICS.iPaddedBorderWidth); 也可以.
踏提供的解决方法中
NONCLIENTMETRICS.cbSize = sizeof(NONCLIENTMETRICS) - sizeof(NONCLIENTMETRICS.iPaddedBorderWidth);
感觉不好使,也许没改明白
那只好改 WINVER的值了
其定义在afxv_w32.h 头文件中 修改其值小于0x0600 保存编译运行问题解决
至于修改其值小于0x0600
英文翻译过来如下
iPaddedBorderWidth的填充边界的厚度像素。默认值是4个像素。该iPaddedBorderWidth和iBorderWidth成员组合为调整大小,在Windows Aero桌面体验nonresizable窗口。要编译的应用程序使用此成员,定义_WIN32_WINNT为0x0600或更高版本。欲了解更多信息,请参见备注。 Windows Server 2003和Windows XP/2000的:该成员不支持。 http://msdn.microsoft.com/en-us/library/ms724506(VS.85).aspx(我的系统为Xp)
- 关于BCMenu在VC6和Vc9,VC2008一些用法差异
- 关于VC6和VC9的区别
- boost在vc9(vc2008)下的安装
- PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- 【总结】PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本的选择
- PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择
- PHP关于VC9和VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC9和VC6的区别以及是否线程安全的版本选择
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- tomcat开发servlet简单实例
- Canon SDK
- Linux下SSH2认证模式的配置和使用
- 开发共享库需要遵循的原则
- 一个类型要想支持foreach则必须实现IEnumerable,IEnumerator两个接口。
- 关于BCMenu在VC6和Vc9,VC2008一些用法差异
- Oracle 8i Restore HotBackup
- sql 优化
- PowerDesigner连接MySQL
- Visual C# http协议开发
- #pragma
- 使用ASP.NET生成Word文档并直接下载
- eclipse startup.jar, startup.jar
- 自定义sap编号