Windows - C ++ Pixels indstillet via SetPixel forsvinder, når du ændrer konsollen eller flytter den ud af skærmen

Indlæg af Hanne Mølgaard Plasc

Problem



Så jeg bruger i øjeblikket SetPixel-funktionen til at recolor nogle pixels på skærmen. Men når jeg ændrer konsollen eller flytter konsollen ud af skærmen, er billedpunkterne, der gik ud af skærmen, sort igen.


Hvordan kan jeg forhindre dem i at blive sorte?


Hilsen, TPRAMMUS


EDIT: Her er et eksempel:


#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;
}

Bedste reference


Konsolvinduet er ikke dit vindue, du bør ikke tegne det direkte!


Du må bruge FillConsoleOutputAttribute og FillConsoleOutputCharacter for at oprette farvet 'grafik' med bokse og linjer og spille med skærmbufferne, men det handler om det. [6]


Hvis du har brug for pixelpræcision, skal du oprette dit eget vindue med CreateWindow og tegne i WM\_PAINT. [7] [8]

Andre referencer 1


En løsning du kan gøre er at skabe en uendelig sløjfe, så indenfor uendelig sløjfe, kaldes den indstillede pixel her.


Venligst se eksemplet kode (baseret på hvad du har givet):


#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;
}


Ikke så perfekt løsning, som når du ruller ned i konsollen, bliver pixel replikeret og ser ud som en bageste prik, men det giver dig ideen om, hvordan man får tingene færdige. :)