我是c ++编程的新手,我发现它很有趣,也很有趣。 任何人都可以给我一个想法,为Windows控制台中的特定像素设置颜色,而颜色将保持永久,即使Windows控制台刷新或移动。
我使用Setpixel()作为我最近的代码。这里有一些代码片段假设它在函数体内:
HWND myconsole = GetConsoleWindow();
HDC dc = GetDC(myconsole);
COLORREF color = RGB(255,120,120);
for(int count =0;count<100;count++)
{
SetPixel(dc,0,count,color);
}
任何想法和意见都会很有帮助。谢谢!
答案 0 :(得分:1)
要么你的问题不清楚,要么你改变了你的想法,并决定你想在Win32窗口上绘制,而不是Win32控制台窗口。在任何情况下,这里都有两个问题的答案。
您可以通过多种方式绘制到Win32项目(包括OpenGL和DirectX等图形API)。最简单的方法是使用Windows GDI(图形设备接口),它只是许多属于Windows.h的函数。
SetPixel()将绘制到你给它一个句柄(第一个参数)的任何设备上下文。如果您希望在窗口上绘图,则此句柄必须位于主窗口的设备上下文中(您还可以将其设置为屏幕外表面,如后备缓冲区)。
因此,要获取主窗口的Device Context的句柄,请使用:GetDC(hWnd),其中hWnd是主窗口的句柄。返回的Device Context句柄可以在SetPixel()中用于绘制窗口。
HDC _hWindowDC = GetDC(_hWnd);
SetPixel(_hWindowDC, _iXpos, _iYpos, _myColorRef);
如果你想像你想要的那样绘制到设备上下文,你需要创建一个Win32项目,而不是一个Win32控制台项目。
正如评论中所提到的,对于控制台项目,您只能“绘制”字符,而不是像素。例如,您可以选择一个屏幕坐标并输出一些字符,如下所示:
COORD point;
point.X = _iX;
point.Y = _iY;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), point);
cout << "Whatever";
答案 1 :(得分:0)
const CHAR_INFO *buffer;
CHAR_INFO buffer1;
buffer = &buffer1;
buffer1. Char. AsciiChar= '-';
buffer1.Attributes = 0x0001;
const SECURITY_ATTRIBUTES *securityAttribute;
HANDLE writeConsole= GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE readConsole = GetStdHandle(STD_INPUT_HANDLE);
COORD buffer1Size={10,10};
COORD position = { 4,4};
SMALL_RECT display ={4,4,50,50};
WriteConsoleOutput(writeConsole,buffer,buffer1Size,position,&display);