gpt4 book ai didi

c - INITCOMMONCONTROLSEX 未在此范围内声明

转载 作者:太空宇宙 更新时间:2023-11-04 06:14:07 25 4
gpt4 key购买 nike

编译时

#include<windows.h>
#include <commctrl.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
INITCOMMONCONTROLSEX ex;

return 0;
}

 g++ 1.cpp   -w -g  -lgdi32 -lcomctl32 -o 1.exe

我得到了错误

1.cpp: In function 'int WinMain(HINSTANCE, HINSTANCE, LPSTR, int)':
1.cpp:8:2: error: 'INITCOMMONCONTROLSEX' was not declared in this scope
INITCOMMONCONTROLSEX ex;
^.

我怀疑我收到此错误是因为在 commctrl.h 中,以下 #if 条件不为真。

#if (_WIN32_IE >= 0x0300)
typedef struct tagINITCOMMONCONTROLSEX {
DWORD dwSize;
DWORD dwICC;
} INITCOMMONCONTROLSEX,*LPINITCOMMONCONTROLSEX;
#endif

我试过编译

#define _WIN32_IE 0x0300

#include<windows.h>
#include <commctrl.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
INITCOMMONCONTROLSEX ex;

return 0;
}

这工作正常,我没有收到任何错误。我查了一下MSDN但是没有关于在此处添加 #define _WIN32_IE 0x0300 的内容。


问题:

  • _WIN32_IE 的用途是什么?
  • 当 MSDN 没有写任何关于这样做的内容时,我真的需要硬编码它的值吗?

最佳答案

comctl32 的初始版本随 Windows 95/Windows NT 一起提供。从那时起,Windows 7 之前的每个版本都有一个新的更新版本,但这些新版本首先作为 Internet Explorer 的一部分发布。 Internet Explorer 3、4、5、6 和 7 通常包含新版本的 comctl32、shlwapi 和 shell32。

如今这已成为历史,但您仍然需要声明要解锁某些功能所针对的 Windows 和 IE 版本。

在您的代码中添加#define _WIN32_IE 0x0300 可解锁 IE 3.0 中引入的功能,您的程序将只能在 Windows 95 ORS 2 或更高版本上运行,Windows 95 RTM 需要安装 IE3 或 4 .

您不关心 Windows 95(希望如此),但相同类型的 #if 检查也适用于许多其他较新的功能,但并非所有功能都在 MSDN 上正确记录,因为它们可能假设您使用的是不到 20 年的 Visual Studio 项目。

不幸的是,MSDN 上列出的最低操作系统版本是错误的,不可信。微软已经删除了 99% 的关于 2000 年之前版本的信息,现在他们似乎忽略了 2003/Vista 之前的任何信息。

关于c - INITCOMMONCONTROLSEX 未在此范围内声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com