如何在Windows控制台中为特定像素着色

时间:2015-04-22 06:38:24

标签: c++

我是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);
    }

任何想法和意见都会很有帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

要么你的问题不清楚,要么你改变了你的想法,并决定你想在Win32窗口上绘制,而不是Win32控制台窗口。在任何情况下,这里都有两个问题的答案。

  1. 绘制到Win32窗口(不是控制台)
  2. 您可以通过多种方式绘制到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控制台项目。

    1. 绘制到Win32控制台项目
    2. 正如评论中所提到的,对于控制台项目,您只能“绘制”字符,而不是像素。例如,您可以选择一个屏幕坐标并输出一些字符,如下所示:

      COORD point; 
      
      point.X = _iX; 
      point.Y = _iY; 
      
      SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), point); 
      cout << "Whatever";
      

答案 1 :(得分:0)

@Cody Gray这是我尝试WriteConsoleOutput时的片段。这不是很好但也许它可以帮助其他..如果有人可以提出想法并纠正一些逻辑和误解,那么它更好..谢谢

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