c++ - 将 SetPixel 坐标转换为控制台上的像素

标签 c++ winapi console

我在 C++ 中工作,通常控制台的大小是 25*80 像素,但我使用 setpixel() 方法在控制台上显示并且它需要更大的坐标值,为什么会这样以及如何转换从像素到 setpixel() 坐标。

这是我的 setpixel() 代码

   HWND myconsole = GetConsoleWindow();
   HDC mydc = GetDC(myconsole);
   SetPixel(mydc,50,50,RGB(0,255,0));

最佳答案

你说的25*80不是以像素为单位,而是以字符为单位。如果你想使用 SetPixel 来修改控制台窗口,你首先必须得到客户区的大小,这可以通过 GetClientRect 来完成。 .

以下将在您的控制台窗口的客户区绘制一个红色十字准线:

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));

请注意,控制台窗口可以(并且将会)在认为有必要重绘时覆盖您的绘图。

关于c++ - 将 SetPixel 坐标转换为控制台上的像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23403374/

相关文章:

c++ - auto的推导使编译器生成默认构造函数

c++ - 派生类中是否需要显式声明的析构函数?

c++ - C++ 映射是什么意思?

c++ - 为什么从构造函数抛出异常时会发生内存泄漏?

c - SetFilePointerEx 获取文件大小

http - 如何检测 Windows 中的防火墙?

C++:读取另一个进程的内存

java - 如果在控制台中输入非数字,如何使程序继续运行

c++ - 使用 WriteConsoleOutputA 在控制台中输出

c++ - Visual Studio C++ 控制台操纵杆