忽然发现WTL更新到9.0.4140了,便对比了一下 8.1.12085。

先看看atlapp.h中有什么大的变动。

第61行:

#if defined(_SYSINFOAPI_H_) && defined(NOT_BUILD_WINDOWS_DEPRECATE) && (_WIN32_WINNT >= 0x0501)
#include <VersionHelpers.h>
#endif

  XP以及上的系统可以用 VersionHelpers.h中一些更方便的工具函数来判断windows版本了,例如:IsWindowsXPOrGreater()、IsWindowsXPSP3OrGreater()、IsWindows8OrGreater(),同时VC2013编译时也会警告GetVersionEx等API已经过时,所以WTL 9引入了这些新API,并改写之前WTL版本,如:

	inline bool IsVista()
{
#ifdef _versionhelpers_H_INCLUDED_
return ::IsWindowsVistaOrGreater();
#else // !_versionhelpers_H_INCLUDED_
OSVERSIONINFO ovi = { sizeof(OSVERSIONINFO) };
BOOL bRet = ::GetVersionEx(&ovi);
return ((bRet != FALSE) && (ovi.dwMajorVersion >= 6));
#endif // _versionhelpers_H_INCLUDED_
}

  

	inline bool IsWin7()
{
#ifdef _versionhelpers_H_INCLUDED_
return ::IsWindows7OrGreater();
#else // !_versionhelpers_H_INCLUDED_
OSVERSIONINFO ovi = { sizeof(OSVERSIONINFO) };
BOOL bRet = ::GetVersionEx(&ovi);
return ((bRet != FALSE) && (ovi.dwMajorVersion == 6) && (ovi.dwMinorVersion >= 1));
#endif // _versionhelpers_H_INCLUDED_
}

  

第1165行:

// GenericWndClass - generic window class usable for subclassing

// Use in dialog templates to specify a placeholder to be subclassed
// Specify as a custom control with class name WTL_GenericWindow
// Call Rregister() before creating dialog (for example, in WinMain)
namespace GenericWndClass
{
inline LPCTSTR GetName()
{
return _T("WTL_GenericWindow");
} inline ATOM Register()
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX) };
wc.lpfnWndProc = ::DefWindowProc;
wc.hInstance = ModuleHelper::GetModuleInstance();
wc.hCursor = ::LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = GetName();
ATOM atom = ::RegisterClassEx(&wc);
ATLASSERT(atom != 0);
return atom;
} inline BOOL Unregister() // only needed for DLLs or tmp use
{
return ::UnregisterClass(GetName(), ModuleHelper::GetModuleInstance());
}
}; // namespace GenericWndClass

  这是三个新增的函数,看注释知道,是用于subclass之类的,还没看到具体该怎样用。注释里WTL作者居然写错字了,嘿嘿。

WTL 9.0的变化 - atlapp.h的更多相关文章

  1. WTL 9.0的变化 - atlctrls.h

    atlctrls.h中是对控件的封装. 第1249行增加: void GetMargins(UINT& nLeft, UINT& nRight) const { ATLASSERT(: ...

  2. WTL 9.0的变化 - atlcrack.h

    atlcrack.h中是一些对消息映射的简化,9.0版本中只增加了一个WM_MOUSEWHEEL的响应,而且要求windows vista. #if (_WIN32_WINNT >= 0x060 ...

  3. Swift2.3 --> Swift3.0 的变化

    Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...

  4. CMMI 2.0术语变化

    过程域 vs. 实践域 “过程域”(Process Areas,PAs)在CMMI 2.0中变成了“实践域(Practice Areas,PAs)”.这样的改变,强调了CMMI 2.0是最佳实践的集合 ...

  5. vue.js学习:1.0到2.0的变化(区别)

    一.生命周期 1.1.0的生命周期: 周期 解释 init 组件刚刚被创建,但Data.method等属性还没被计算出来 created 组件创建已经完成,但DOM还没被生成出来 beforeComp ...

  6. 如何在VC6.0下用pthread.h这个头文件

    如何在VC6.0下用pthread.h这个头文件   1.下载PTHREAD的WINDOWS开发包 pthreads-w32-2-4-0-release.exe(任何一个版本均可) http://so ...

  7. D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): error: #5: cannot open source input file "core_cm3.h": No such file or directory

    1. 错误提示信息: D:\Software\Keil5\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include\stm32f10x.h(483): erro ...

  8. Swift3.0语法变化

    写在前面 首先和大家分享一下学习新语法的技巧:用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Syntax- 让Xcod ...

  9. Vue2.0 相对于Vue1.0的变化:生命周期

    1.生命周期 根据提供的生命周期钩子说明Vue.js实例各个阶段的情况,Vue.js 2.0对不少钩子进行了修改,以下说明:(灰色字体代表是 2.0已经废弃或者被更名的钩子,黑色字体代表1.0 和2. ...

随机推荐

  1. GreenPlum 大数据平台--监控

    数据库状态监控活动 活动 过程 纠正措施 列出当前状态为down的Segment.如果有任何行被返回,就会生成一个警告或者告警. 推荐频率:每5到10分钟 重要度: IMPORTANT 在postgr ...

  2. asp.net mvc移除X-AspNet-Version、X-AspNetMvc-Version、Server

    asp.net mvc程序部署到IIS,,返回的HTTP头中包含Server, X-Powered-By, 和 X-AspNet-Version.X-AspNet-Version信息. 这些信息有时给 ...

  3. STM32调试,发现HAL_Init();之后无法调试,甚至无法让程序停下来

    症状 最近开始学习STM32Cube,发现新建工程后无法正常调试,过了HAL_Init();之后就无法继续调试了. 无法进行让程序暂停以及停止等操作.并在输出窗口不断刷出 ERROR: Can not ...

  4. Jenkins使用过程中遇到的问题

    1./usr/local/jdk1.8.0_191/ is not a directory on the Jenkins master (but perhaps it exists on some a ...

  5. talk about string,char

    [1].关于sprintf和snprintf的正确使用 考虑以下有缺陷的例子:void f(const char *p){ char buf[11]={0}; sprintf(buf,"%1 ...

  6. PostMan测试REST接口时候,如何绕过登录的验证

    原文地址:https://blog.csdn.net/qq_34178998/article/details/80361315 之前测试的时候,需要页面进行登录之后,才能让访问后台程序,但是在进行接口 ...

  7. 关于优秀的视频播放器 - PotPlayer

    播放器设置 直接截图: 其他重要功能 1. 切换语音:Alt + A 谢谢浏览!

  8. dotnet + LinQ 按照指定的字段 和 排序方式排序

    /// <summary> /// 根据指定属性名称对序列进行排序 /// </summary> /// <typeparam name="TSource&qu ...

  9. [转] Nginx配置中的location、root、alias

    Nginx配置中的location.root.alias location & root 初始配置 [root@adailinux vhost]# cat rio.conf server { ...

  10. Python 练习题:用索引取出LIST中的值

    请用索引取出下面list的指定元素,分别为Apple,Python,Lisa # -*- coding: utf-8 -*- # 请用索引取出下面list的指定元素 L = [ ['Apple','G ...