Skip to content

29.07.2021 Простое шуточное окно, реализованное с помощью WinAPI

Notifications You must be signed in to change notification settings

ellvenro/WinAPI_joke

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Простая программа, реализованная с помощью элементов интерфейса API Windows

Шуточное окно с отсутствием возможности нажать на одну из кнопок

Программа создана для изучения основ программирования с использованием Windows API.

При открытии пользователем программы (*.exe файла) появляется окно с двумя кнопками "Да" и "Нет" и текстом, провоцирующем на нажатие кнопки "Нет". При попытке нажатия на данную кнопку она начинает "бегать" по экрану.

Пользователь не имеет возможности выйти из программы с помощью кнопки "Закрыть". Единственный вариант дальнейших действий - нажатие на кнопку "Да". Далее происходит смена текста и появление кнопки для выхода из программы.

   

   

Видео с демонстрацией работы программы.

Основные моменты при реализации

  • Программа реализована в среде Microsoft Visual Studio 2019. При клонировании репозитория в MS VS запуск программы необходимо осуществлять с помощью WinAPI_joke.sln. После запуска программы в папке WinAPI_joke/Debug будет создан файл WinAPI_joke.exe, работающий отдельно.

  • Файл Source.cpp содержит основную программу: главную функцию, функцию обработки сообщений от окна и функцию перемещения кнопки.

  • Для функционирования программы координаты мыши определяются на экране монитора, далее переводятся в координаты рабочего окна (hwnd - дескриптор рабочего окна).

LPPOINT pPnt = (LPPOINT)malloc(sizeof(*pPnt));
...
GetCursorPos(pPnt);
ScreenToClient(hwnd, pPnt);
  • Новая позиция кнопки, при приближении к ней мыши, определяется с помощью подсчета. Скорость, то есть количество пикселей по диагонали при перемещении кнопки, задается константой. Кнопка движется в том же направлении, что и мышь.
int dx = x - xPos;
int dy = y - yPos;
float dxy = sqrt(dx * dx + dy * dy);
int kdx = speedButton * abs(dx) / (int)dxy;
int kdy = speedButton * abs(dy) / (int)dxy;

masButtonPos[0][0] = (dx <= 0) ? masButtonPos[0][0] - kdx : masButtonPos[0][0] + kdx;
masButtonPos[0][1] = (dy <= 0) ? masButtonPos[0][1] - kdy : masButtonPos[0][1] + kdy;

About

29.07.2021 Простое шуточное окно, реализованное с помощью WinAPI

Topics

Resources

Stars

Watchers

Forks

Languages