Advertisement
alexx876

Untitled

Nov 27th, 2018
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.18 KB | None | 0 0
  1. #include <Windows.h>
  2. #include <iostream>
  3. #include <cstdlib>
  4.  
  5.  
  6.  
  7. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  8. POINT ptPrevious, ptStart;
  9. HWND  hMainWnd;
  10. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  11. {
  12.     MSG msg;
  13.     WNDCLASSEX wc;
  14.  
  15.     char szClassName[] = "AppClass";
  16.     wc.cbSize = sizeof(wc);
  17.     wc.style = CS_HREDRAW | CS_VREDRAW;
  18.     wc.lpfnWndProc = WndProc;
  19.     wc.cbClsExtra = 0;
  20.     wc.cbWndExtra = 0;
  21.     wc.hInstance = hInstance;
  22.     wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  23.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  24.     wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
  25.     wc.lpszMenuName = NULL;
  26.     wc.lpszClassName = szClassName;
  27.     wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  28.     /*****************************************************************************************************************************/
  29.     if (!RegisterClassEx(&wc)) {
  30.         MessageBox(NULL, "Не удалось зарегистрировать класс окна", "Ошибка", MB_OK);
  31.         return 0;
  32.     }
  33.  
  34.     hMainWnd = CreateWindow(szClassName, "Программа4(21)", WS_SYSMENU | WS_OVERLAPPED, 400, 100, 500, 500, NULL, NULL, hInstance, NULL);
  35.  
  36.     if (!hMainWnd) {
  37.         MessageBox(NULL, "Не удалось создать главное окно программы", "Ошибка", MB_OK);
  38.         return 0;
  39.     }
  40.     ShowWindow(hMainWnd, nCmdShow);
  41.  
  42.  
  43.     /*Функция GetMessage возвращает FALSE, если получит сообщение WM_QUIT. Во всех остальных случаях она вернёт TRUE.*/
  44.     while (GetMessage(&msg, NULL, 0, 0)) {
  45.         TranslateMessage(&msg);
  46.         DispatchMessage(&msg);
  47.     }
  48.  
  49.     return msg.wParam;
  50. }
  51.  
  52.  
  53. int step = 0;
  54.  
  55. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  56. {
  57.     HDC hDC;
  58.  
  59.     switch (uMsg) {
  60.     case WM_RBUTTONDOWN: {
  61.         InvalidateRect(hWnd, 0, TRUE);
  62.         UpdateWindow(hWnd);
  63.         step = 0;
  64.         break;
  65.     }
  66.     case WM_LBUTTONDOWN: {
  67.         if (step > 2) break;
  68.  
  69.         if (step > 0) {
  70.             hDC = GetDC(hWnd);
  71.             MoveToEx(hDC, ptPrevious.x, ptPrevious.y, NULL);
  72.             LineTo(hDC, LOWORD(lParam), HIWORD(lParam));
  73.             if (step == 2) {
  74.                 MoveToEx(hDC, LOWORD(lParam), HIWORD(lParam), NULL);
  75.                 LineTo(hDC, ptStart.x, ptStart.y);
  76.            
  77.                 MoveToEx(hDC,(LOWORD(lParam) + ptStart.x + ptPrevious.x) / 3, (HIWORD(lParam) + ptStart.y + ptPrevious.y) / 3,0);
  78.                 Ellipse(hDC, ptStart.x + 20, ptStart.y + 20, (ptPrevious.x+ LOWORD(lParam))/2+20, (ptPrevious.y + HIWORD(lParam)) / 2 + 20);
  79.             }
  80.         } else {
  81.             ptStart.x = LOWORD(lParam);
  82.             ptStart.y = HIWORD(lParam);
  83.         }
  84.  
  85.         ptPrevious.x = LOWORD(lParam);
  86.         ptPrevious.y = HIWORD(lParam);
  87.         step++;
  88.         break;
  89.     }
  90.  
  91.  
  92.     case WM_CLOSE: {
  93.         DestroyWindow(hWnd);    //посылает окну сообщение WM_DESTROY, после которого окна на экране уже нет
  94.         break;
  95.     }
  96.     case WM_DESTROY: {
  97.         PostQuitMessage(0);     //посылает сообщение WM_QUIT, после которого прекращается цикл обработки сообщений
  98.         break;
  99.     }
  100.     default: {
  101.         return DefWindowProc(hWnd, uMsg, wParam, lParam); //обработка сообщений по умолчанию
  102.     }
  103.     }
  104.  
  105.     return 0;
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement