Advertisement
Guest User

Untitled

a guest
May 19th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.62 KB | None | 0 0
  1. // Labssss.cpp : definiuje punkt wejścia dla aplikacji
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Labssss.h"
  6. #include <string>
  7. #include <sstream>
  8.  
  9. #define MAX_LOADSTRING 100
  10.  
  11. // Zmienne globalne:
  12. HINSTANCE hInst; // bieżące wystąpienie
  13. WCHAR szTitle[MAX_LOADSTRING]; // Tekst paska tytułu
  14. WCHAR szWindowClass[MAX_LOADSTRING]; // nazwa klasy okna głównego
  15.  
  16. // Przekaż dalej deklaracje funkcji dołączonych w tym module kodu:
  17. ATOM MyRegisterClass(HINSTANCE hInstance);
  18. BOOL InitInstance(HINSTANCE, int);
  19. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  20. INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
  21. POINT m_currPos;
  22. int counter;
  23. bool focused = false;
  24.  
  25. #define x0 150
  26. #define x1 300
  27. #define y0 150
  28. #define y1 300
  29.  
  30. int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
  31. _In_opt_ HINSTANCE hPrevInstance,
  32. _In_ LPWSTR lpCmdLine,
  33. _In_ int nCmdShow)
  34. {
  35. UNREFERENCED_PARAMETER(hPrevInstance);
  36. UNREFERENCED_PARAMETER(lpCmdLine);
  37.  
  38. // TODO: W tym miejscu umieść kod.
  39.  
  40. // Zainicjuj ciągi globalne
  41. LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  42. LoadStringW(hInstance, IDC_LABSSSS, szWindowClass, MAX_LOADSTRING);
  43. MyRegisterClass(hInstance);
  44.  
  45. // Wykonaj inicjacje aplikacji:
  46. if (!InitInstance(hInstance, nCmdShow))
  47. {
  48. return FALSE;
  49. }
  50.  
  51. HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LABSSSS));
  52.  
  53. MSG msg;
  54.  
  55. // Główna pętla wiadomości:
  56. while (GetMessage(&msg, nullptr, 0, 0))
  57. {
  58. if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  59. {
  60. TranslateMessage(&msg);
  61. DispatchMessage(&msg);
  62. }
  63. }
  64.  
  65. return (int)msg.wParam;
  66. }
  67.  
  68.  
  69.  
  70. //
  71. // FUNKCJA: MyRegisterClass()
  72. //
  73. // CEL: Rejestruje klasę okna.
  74. //
  75. ATOM MyRegisterClass(HINSTANCE hInstance)
  76. {
  77. WNDCLASSEXW wcex;
  78.  
  79. wcex.cbSize = sizeof(WNDCLASSEX);
  80.  
  81. wcex.style = CS_HREDRAW | CS_VREDRAW;
  82. wcex.lpfnWndProc = WndProc;
  83. wcex.cbClsExtra = 0;
  84. wcex.cbWndExtra = 0;
  85. wcex.hInstance = hInstance;
  86. wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LABSSSS));
  87. wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
  88. wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  89. wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_LABSSSS);
  90. wcex.lpszClassName = szWindowClass;
  91. wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  92.  
  93. return RegisterClassExW(&wcex);
  94. }
  95.  
  96. //
  97. // FUNKCJA: InitInstance(HINSTANCE, int)
  98. //
  99. // CEL: Zapisuje dojście wystąpienia i tworzy okno główne
  100. //
  101. // KOMENTARZE:
  102. //
  103. // W tej funkcji dojście wystąpienia jest zapisywane w zmiennej globalnej i
  104. // jest tworzone i wyświetlane okno główne programu.
  105. //
  106. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  107. {
  108. hInst = hInstance; // Przechowuj dojście wystąpienia w zmiennej globalnej
  109.  
  110. HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  111. CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
  112.  
  113. if (!hWnd)
  114. {
  115. return FALSE;
  116. }
  117.  
  118. ShowWindow(hWnd, nCmdShow);
  119. UpdateWindow(hWnd);
  120.  
  121. return TRUE;
  122. }
  123.  
  124. //
  125. // FUNKCJA: WndProc(HWND, UINT, WPARAM, LPARAM)
  126. //
  127. // CEL: Przetwarza wiadomości dla okna głównego.
  128. //
  129. // WM_COMMAND — przetwarzaj menu aplikacji
  130. // WM_PAINT — pomaluj okno główne
  131. // WM_DESTROY — opublikuj komunikat o rezygnacji i wróć
  132. //
  133. //
  134. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  135. {
  136. switch (message)
  137. {
  138. case WM_COMMAND:
  139. {
  140. int wmId = LOWORD(wParam);
  141. // Analizuj zaznaczenia menu:
  142. switch (wmId)
  143. {
  144. case IDM_ABOUT:
  145. DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  146. break;
  147. case IDM_EXIT:
  148. DestroyWindow(hWnd);
  149. break;
  150. default:
  151. return DefWindowProc(hWnd, message, wParam, lParam);
  152. }
  153. }
  154. break;
  155. case WM_PAINT:
  156. {
  157. PAINTSTRUCT ps;
  158. HDC hdc = BeginPaint(hWnd, &ps);
  159.  
  160. POINT p;
  161. GetCursorPos(&p);
  162. ScreenToClient(hWnd, &p);
  163.  
  164. std::wstringstream wss;
  165.  
  166. if (focused)
  167. {
  168. wss << "Time to close:";
  169. wss << counter;
  170. }
  171. else
  172. {
  173. wss << p.x;
  174. wss << " , ";
  175. wss << p.y;
  176. }
  177. TextOut(hdc, m_currPos.x, m_currPos.y, wss.str().c_str(), static_cast<int>(wss.str().length()));
  178.  
  179. if (focused)
  180. {
  181. auto brush = CreateSolidBrush(RGB(255, 0, 0));
  182. SelectObject(hdc, brush);
  183. }
  184.  
  185. Rectangle(hdc, x0, y0, x1, y1);
  186.  
  187. EndPaint(hWnd, &ps);
  188. }
  189. break;
  190. case WM_MOUSEMOVE:
  191. {
  192. InvalidateRect(hWnd, nullptr, true);
  193. POINT p;
  194. GetCursorPos(&p);
  195. ScreenToClient(hWnd, &p);
  196.  
  197. bool prev = focused;
  198.  
  199. focused = p.x > x0 && p.x < x1 && p.y > y0 && p.y < y1;
  200.  
  201. if (!prev && focused)
  202. {
  203. counter = 5;
  204. SetTimer(hWnd, 0, 1000, (TIMERPROC)NULL);
  205. }
  206. else if (prev && !focused)
  207. KillTimer(hWnd, 0);
  208.  
  209. break;
  210. }
  211. case WM_LBUTTONDOWN:
  212. {
  213. m_currPos.x = LOWORD(lParam);
  214. m_currPos.y = HIWORD(lParam);
  215. InvalidateRect(hWnd, nullptr, true);
  216.  
  217. break;
  218. }
  219. case WM_TIMER:
  220. {
  221. InvalidateRect(hWnd, nullptr, true);
  222. --counter;
  223.  
  224. if (counter <= 0)
  225. PostMessage(hWnd, WM_CLOSE, 0, 0);
  226.  
  227. break;
  228. }
  229. case WM_DESTROY:
  230. PostQuitMessage(0);
  231. break;
  232. default:
  233. return DefWindowProc(hWnd, message, wParam, lParam);
  234. }
  235. return 0;
  236. }
  237.  
  238. //Procedura obsługi wiadomości dla okna informacji o programie.
  239. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  240. {
  241. UNREFERENCED_PARAMETER(lParam);
  242. switch (message)
  243. {
  244. case WM_INITDIALOG:
  245. return (INT_PTR)TRUE;
  246.  
  247. case WM_COMMAND:
  248. if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  249. {
  250. EndDialog(hDlg, LOWORD(wParam));
  251. return (INT_PTR)TRUE;
  252. }
  253. break;
  254. }
  255. return (INT_PTR)FALSE;
  256. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement