我正在研究一个问题并遇到了这个问题: 将 SetPixel 坐标转换为控制台上的像素
这是代码:
#include <stdio.h>
#include <windows.h>
int main()
{
HWND myconsole = GetConsoleWindow();
HDC mydc = GetDC(myconsole);
RECT rect;
GetClientRect(myconsole, &rect);
for(int i = 0; i < rect.bottom - rect.top; ++i)
SetPixel(mydc, (rect.right - rect.left) / 2, i, RGB(255, 0, 0));
for(int i = 0; i < rect.right - rect.left; ++i)
SetPixel(mydc, i, (rect.bottom - rect.top) / 2, RGB(255, 0, 0));
}
它在 Visual Studio 中编译并运行,但从命令行(cl test.c)我收到以下错误:
error LNK2019: unresolved external symbol __imp__SetPixel@16 referenced in function _main
error LNK2019: unresolved external symbol __imp__GetDC@4 referenced in function _main
error LNK2019: unresolved external symbol __imp__GetClientRect@8 referenced in function _main
[cl]
我在 Visual Studio 中也遇到了相同代码的失败链接,直到我通过定义 _WIN32_WINNT 0x0502
通知 Visual Studio 我的目标操作系统至少是 Windows Server 2003。这是因为其中一些 API(例如
GetConsoleWindow)直到“XXX”Windows 版本才可用。 这里
是有关_WIN32_WINNT
定义的更多信息,如果您感兴趣的话。
/* Targeting Windows Server 2003 & later: */
#define _WIN32_WINNT 0x0502 /* Be sure to #define BEFORE you #include windows.h */
#include <windows.h>
int graphics_test()
{
HWND myconsole = GetConsoleWindow();
HDC mydc = GetDC(myconsole);
RECT rect;
int i;
GetClientRect(myconsole, &rect);
for(i = 0; i < rect.bottom - rect.top; ++i)
SetPixel(mydc, (rect.right - rect.left) / 2, i, RGB(255, 0, 0));
for(i = 0; i < rect.right - rect.left; ++i)
SetPixel(mydc, i, (rect.bottom - rect.top) / 2, RGB(255, 0, 0));
return 0;
}