Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <iostream>
- #include <cstdlib>
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- POINT ptPrevious, ptStart;
- HWND hMainWnd;
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- MSG msg;
- WNDCLASSEX wc;
- char szClassName[] = "AppClass";
- wc.cbSize = sizeof(wc);
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hInstance = hInstance;
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = szClassName;
- wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
- /*****************************************************************************************************************************/
- if (!RegisterClassEx(&wc)) {
- MessageBox(NULL, "Не удалось зарегистрировать класс окна", "Ошибка", MB_OK);
- return 0;
- }
- hMainWnd = CreateWindow(szClassName, "Программа4(21)", WS_SYSMENU | WS_OVERLAPPED, 400, 100, 500, 500, NULL, NULL, hInstance, NULL);
- if (!hMainWnd) {
- MessageBox(NULL, "Не удалось создать главное окно программы", "Ошибка", MB_OK);
- return 0;
- }
- ShowWindow(hMainWnd, nCmdShow);
- /*Функция GetMessage возвращает FALSE, если получит сообщение WM_QUIT. Во всех остальных случаях она вернёт TRUE.*/
- while (GetMessage(&msg, NULL, 0, 0)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- int step = 0;
- LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- HDC hDC;
- switch (uMsg) {
- case WM_RBUTTONDOWN: {
- InvalidateRect(hWnd, 0, TRUE);
- UpdateWindow(hWnd);
- step = 0;
- break;
- }
- case WM_LBUTTONDOWN: {
- if (step > 2) break;
- if (step > 0) {
- hDC = GetDC(hWnd);
- MoveToEx(hDC, ptPrevious.x, ptPrevious.y, NULL);
- LineTo(hDC, LOWORD(lParam), HIWORD(lParam));
- if (step == 2) {
- //отступ от краев
- int addto = 50;
- //рисуем окружность
- Ellipse(hDC,
- //левый верхний угол
- abs(min(min(ptStart.x, ptPrevious.x), LOWORD(lParam))-addto),abs(min(min(ptStart.y, ptPrevious.y), HIWORD(lParam))- addto),
- //правый нижний угол
- max(max(ptStart.x, ptPrevious.x), LOWORD(lParam))+addto, max(max(ptStart.y, ptPrevious.y), HIWORD(lParam))+ addto
- );
- //Перерисовываем тр
- MoveToEx(hDC, LOWORD(lParam), HIWORD(lParam), NULL);
- LineTo(hDC, ptStart.x, ptStart.y);
- LineTo(hDC, ptPrevious.x, ptPrevious.y);
- LineTo(hDC, LOWORD(lParam), HIWORD(lParam));
- }
- } else {
- ptStart.x = LOWORD(lParam);
- ptStart.y = HIWORD(lParam);
- }
- ptPrevious.x = LOWORD(lParam);
- ptPrevious.y = HIWORD(lParam);
- step++;
- break;
- }
- case WM_CLOSE: {
- DestroyWindow(hWnd); //посылает окну сообщение WM_DESTROY, после которого окна на экране уже нет
- break;
- }
- case WM_DESTROY: {
- PostQuitMessage(0); //посылает сообщение WM_QUIT, после которого прекращается цикл обработки сообщений
- break;
- }
- default: {
- return DefWindowProc(hWnd, uMsg, wParam, lParam); //обработка сообщений по умолчанию
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement