通过调整控制台大小或将其移出屏幕时,通过SetPixel设置的C ++像素正在消失

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过调整控制台大小或将其移出屏幕时,通过SetPixel设置的C ++像素正在消失相关的知识,希望对你有一定的参考价值。

所以我目前正在使用SetPixel函数重新着色屏幕上的一些像素。但是当我调整控制台大小或将控制台移出屏幕时,屏幕外的像素再次变黑。

我怎样才能防止它们变黑?

问候,TPRammus

编辑:这是一个例子:

#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>

using namespace std;

HWND consoleWindow = GetConsoleWindow();    // Get a console handle

int main()
{
    HDC consoleDC = GetDC(consoleWindow);        // Get a handle to device context

    SetPixel(consoleDC, 20, 20, RGB(255, 255, 255));

    ReleaseDC(consoleWindow, consoleDC);
    cin.ignore();
    return 0;
}
答案

控制台窗口不是您的窗口,您不应该直接使用它!

您可以使用FillConsoleOutputAttributeFillConsoleOutputCharacter创建带有框和线的彩色“图形”,并使用屏幕缓冲区,但这是关于它。

如果您需要像素精度,那么您需要在CreateWindow中使用drawWM_PAINT创建自己的窗口。

另一答案

你可以做的一个解决方案是创建一个无限循环,然后在无限循环内,在这里调用设置像素。

请查看示例代码(基于您提供的内容):

#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>

using namespace std;

HWND consoleWindow = GetConsoleWindow();    // Get a console handle

int main()
{
    HDC consoleDC = GetDC(consoleWindow);        // Get a handle to device context

    while(true){
        SetPixel(consoleDC, 20, 20, RGB(255, 255, 255));
        SetPixel(consoleDC, 20, 21, RGB(255, 255, 255));
        SetPixel(consoleDC, 20, 22, RGB(255, 255, 255));
        SetPixel(consoleDC, 20, 23, RGB(255, 255, 255));
        SetPixel(consoleDC, 21, 20, RGB(255, 255, 255));
        SetPixel(consoleDC, 21, 21, RGB(255, 255, 255));
        SetPixel(consoleDC, 21, 22, RGB(255, 255, 255));
        SetPixel(consoleDC, 21, 23, RGB(255, 255, 255));
        SetPixel(consoleDC, 22, 20, RGB(255, 255, 255));
        SetPixel(consoleDC, 22, 21, RGB(255, 255, 255));
        SetPixel(consoleDC, 22, 22, RGB(255, 255, 255));
        SetPixel(consoleDC, 22, 23, RGB(255, 255, 255));
        SetPixel(consoleDC, 23, 20, RGB(255, 255, 255));
        SetPixel(consoleDC, 23, 21, RGB(255, 255, 255));
        SetPixel(consoleDC, 23, 22, RGB(255, 255, 255));
        SetPixel(consoleDC, 23, 23, RGB(255, 255, 255));
    }

    ReleaseDC(consoleWindow, consoleDC);
    cin.ignore();
    return 0;
}

不是那么完美的解决方案,就像向下滚动控制台一样,像素正在复制并且看起来像一个尾随点,但它可以让您了解如何完成任务。 :)

以上是关于通过调整控制台大小或将其移出屏幕时,通过SetPixel设置的C ++像素正在消失的主要内容,如果未能解决你的问题,请参考以下文章

surface pro4 通过键盘的触摸板怎么实现右击?

使用固定位置时,jQuery UI 对话框离开屏幕

将 XIB 文件自动调整为屏幕大小

调整移动屏幕大小时不居中对齐

CSS使图像调整大小并适合任何屏幕

redis中存储策略