Изменить цвет пикселя на весь экран - PullRequest
0 голосов
/ 27 сентября 2018

Я бы хотел изменить цвет любого пикселя с помощью функции WinAPI SetPixel ().Я написал что-то вроде этого:

#include <iostream>
#include <Windows.h>

int main() {

    HDC hdc = GetDC(NULL);

    if(hdc == NULL) {
        std::cout << "FAIL: GetDC";
        return 1;
    }
    else
        std::cout << "hdc = " << hdc << std::endl;

    int x = 200, y = 400;

    COLORREF result = SetPixel(
        hdc, 
        x, 
        y, 
        RGB(255, 0, 0)
    );

    if(result == -1) {
        std::cout << "FAIL: SetPixel";
        return 1;
    }
    else
        std::cout << "Set color pixel: " << result << std::endl;

    std::cin.get();
    return 0;
}

Но я не вижу красного пикселя.Я думаю, что проблема связана с устройством, но MSDN говорит, что для всего экрана должен быть аргумент NULL для функции GetDC ().

1 Ответ

0 голосов
/ 27 сентября 2018

Ваш пиксель перезаписывается другим значением цвета другим приложением.По сути, какое бы окно ни занимало пиксель в 200,400, определяется цвет этого пикселя.

Если вы используете бесконечный цикл, подобный следующему:

while (true) {
    COLORREF result = SetPixel(
        hdc,
        x,
        y,
        RGB(255, 0, 0)
    );

    if (result == -1) {
        std::cout << "FAIL: SetPixel";
        return 1;
    }
    else
        std::cout << "Set color pixel: " << result << std::endl;
}

, вы можете увидеть свой пиксель, в зависимости от когда ваш код обновляет пиксель и когда приложение под этим пикселем обновляет его.

Я попробовал ваш код с бесконечным циклом и установил MS Paint в соответствующую координатуи смог увидеть пиксель.

В любом случае, то, что вы делаете, крайне ненадежно, поскольку вы никогда не узнаете, что другие приложения делают с контекстом устройства.Лучше всего создать и использовать окно, которое принадлежит вашему приложению.

Вот снимок экрана:

enter image description here

Как толькоЯ закрываю приложение или приостанавливаю его в отладчике или прекращаю цикл любым другим способом, Paint снова устанавливает пиксель в белый цвет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...