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

问题描述 投票:0回答:2

我在c ++中工作,通常控制台的大小是25 * 80像素,但我使用

SetPixel()
方法在控制台上显示,它需要更大的坐标值,为什么会这样以及如何从像素转换到
SetPixel()
坐标。

这是我的代码

SetPixel()

HWND myconsole = GetConsoleWindow();
HDC mydc = GetDC(myconsole);
SetPixel(mydc,50,50,RGB(0,255,0));
c++ winapi console
2个回答
2
投票

你所说的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));

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


0
投票

ScreenToClient 提供屏幕坐标到客户端坐标的转换。将坐标提供给 ScreenToClient 并获取客户端坐标并在那里绘制。

© www.soinside.com 2019 - 2024. All rights reserved.