При запуске, программа должна рисовать короткую линию по середине экрана (Поверх всех программ). Линия рисуется, все хорошо, но очень сильно мерцает. Как решить проблему?
Вот код:
#include <iostream>
#include <windows.h>
#include <winuser.h>
#include <stdio.h>
using namespace std;
int main() {
int y = 0;
int x = 0;
int xs = 0;
int ys = 0;
RECT desktop;
const HWND hDesktop = GetDesktopWindow();
GetWindowRect(hDesktop, &desktop);
x = desktop.right / 2;
y = desktop.bottom / 2 - 2;
xs = desktop.right / 2 - 2;
ys = desktop.bottom / 2;
HPEN pen = CreatePen(PS_SOLID, 8, RGB(255, 0, 0));
HDC dot = ::GetDC(0);
for (;;) {
SelectObject(dot, pen);
MoveToEx(dot, x, y, NULL);
LineTo(dot, x, y + 4);
Sleep(10);
}
}
Цикл не нужен, Вы постоянно перерисовываете линию, поэтому она и мерцает. Достаточно нарисовать линию и остановить выполнение программы. Также важно освобождать ресурсы.
HPEN op = (HPEN)SelectObject(dot, pen);
//for (;;)
{
MoveToEx(dot, x, y, NULL);
LineTo(dot, x, y + 40); //
//Sleep(10);
}
SelectObject(dot, op);
DeleteObject (pen);
ReleaseDC (0, dot);
getchar();
Ну и конечно, как только произойдет перерисовка, то линия затрется. Именно поэтому лучше создать прозрачное окно и перерисовывать линию по событию WM_PAINT окна. В этом случае линия будет перерисовываться, когда приложение будет становится активным.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Увидел недавно оператор <=> в чужом коде и испытал культурный шокЧто за зверь, что он делает и когда использовать?
Не первый раз ошибка *** wasnt declared in this scope, так и не могу понять в чем дело
Необходимо определить размер массива, переданного в функциюПробовал вот так:
Почему конструкция switch case работает только с интегральными типами, и что вообще такое интегральные типы?