Как рисовать на экране в С++?

Как бы я рисовал что-то на экране? не окно консоли, а весь экран, желательно с свернутой консолью.

Кроме того, будет ли это отображаться на принтскрине? Что я хочу сделать, так это создать что-то вроде слоя поверх экрана, о котором знают только я и мое приложение, но при этом иметь возможность использовать приложения как обычно.

Вот пример: предположим, я хочу, чтобы 2 желтых квадрата размером 5 на 5 пикселей появлялись в центре экрана поверх всех других приложений, на которые нельзя было бы кликнуть и которые не видны на экране печати.

[Редактировать]

Я забыл упомянуть, что использую Visual Studio 2010 в Windows XP.


person Kesarion    schedule 05.06.2010    source источник
comment
Здесь может быть полезно больше контекста о том, чего вы пытаетесь достичь.   -  person Thanatos    schedule 05.06.2010
comment
Похоже, вы делаете плохого тролля, не давая людям закрыть приложение. :D   -  person Jeroen    schedule 11.07.2013


Ответы (4)


в windows вы можете использовать функцию GetDC. просто минималистичный пример:

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

void drawRect(){
    HDC screenDC = ::GetDC(0);
    ::Rectangle(screenDC, 200, 200, 300, 300);
::ReleaseDC(0, screenDC);
}
int main(void){
    char c;
    std::cin >> c;
    if (c == 'd') drawRect();
    std::cin >> c;
    return 0;
}

но начиная с Windows Vista он очень медленный

person OlimilOops    schedule 05.06.2010
comment
Используйте Direct2D в Windows Vista. - person Puppy; 05.06.2010
comment
Да, это работает, но это отображается на экране печати: P Интересно, есть ли способ сделать его невидимым для любого снимка экрана. - person Kesarion; 05.06.2010
comment
Эй, как мне изменить цвет? : Д. - person JSideris; 19.03.2013

C++ не имеет понятия "экран" и особенно "графика". Необходимая функциональность предоставляется вашей операционной системой. Во многих системах вам понадобится «Окно» и рисуйте в нем. Чтобы сделать это переносимым, может помочь такая библиотека, как Qt. Решение для Windows было предоставлено Oops. Возможно, вы захотите использовать какую-нибудь библиотеку OpenGL или Windows DirectDraw/Direct3D из DirectX, если вы хотите сделать что-то трехмерное с вашей графикой.

person johannes    schedule 05.06.2010
comment
Еще одна кроссплатформенная графическая библиотека: en.wikipedia.org/wiki/Simple_DirectMedia_Layer - person ʇsәɹoɈ; 05.06.2010

Windows предлагает GDI/+, WPF и DirectX (включая Direct2D в Vista+).

person Puppy    schedule 05.06.2010

Графическая библиотека (довольно приятная, но не обновлявшаяся недавно) антизернистая геометрия имеет очень простые привязки для отображения своих демонстраций. в различных оконных системах вы можете посмотреть на них в качестве примеров. Но для чего-то гораздо более сложного вы, вероятно, говорите о библиотеках, специфичных для операционной системы.

person Pete Kirkham    schedule 05.06.2010