首页 > 解决方案 > WinApi 中的 SetWindowSubclass 函数

问题描述

试图用 MinGW 编译一些使用 SetWindowSubclass 函数的代码,但编译器告诉我没有这样的函数。在头文件中找到函数的声明,commctrl.h它似乎被某些定义排除在外:

图片

我可以用它做任何事吗?

标签: winapimingw

解决方案


SetWindowSubclass在 Code::Blocks 中使用 MinGW 重新创建了同样的问题。

从需要大于的#if条件语句可以看出(代表Windows XP,因为最小支持的客户端 是windows XP)_WIN32_WINNT_WIN32_WINNT_WINXPSetWindowSubclass

在 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工具,可以正确定义这些宏。


推荐阅读