【发布时间】:2020-02-06 23:27:26
【问题描述】:
试图用 MinGW 编译一些使用 SetWindowSubclass 函数的代码,但编译器告诉我没有这样的函数。在头文件commctrl.h 中找到函数的声明,它似乎被某些定义排除在外:
我可以用它做些什么吗?
【问题讨论】:
-
Setting WINVER or _WIN32_WINNT。但真正的 解决方案是完全不使用MinGW。它有所有错误的默认值。
试图用 MinGW 编译一些使用 SetWindowSubclass 函数的代码,但编译器告诉我没有这样的函数。在头文件commctrl.h 中找到函数的声明,它似乎被某些定义排除在外:
我可以用它做些什么吗?
【问题讨论】:
我在 Code::Blocks with MinGW 中使用 SetWindowSubclass 重新创建了相同的问题。
从#if条件语句可以看出_WIN32_WINNT需要大于_WIN32_WINNT_WINXP(代表Windows XP,因为SetWindowSubclass的最低支持客户端是windows XP)
在 sdkddkver.h 中,_WIN32_WINNT_WINXP 定义为:
#define _WIN32_WINNT_WINXP 0x0501 /* Windows XP */
所以我们需要定义_WIN32_WINNT大于0x501:
#define _WIN32_WINNT 0x502
#include <windows.h>
#include <stdio.h>
#include <commctrl.h>
你应该在 MinGW 中为这个 api 链接的库是 libcomctl32.a。
另外推荐使用MSVC和VS工具,可以正确定义这些宏。
【讨论】: