Advertisement
Margoshinka

WinApi2

Sep 30th, 2021
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.49 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <tchar.h>
  4. #include <stdio.h>
  5. LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
  6. WNDCLASS w;
  7. CONST INT N=40;
  8. COLORREF lineColor = RGB(0, 0, 0);
  9. HBRUSH hBrush;
  10.  
  11.  
  12. void RunNotepad(void)
  13. {
  14. STARTUPINFO sInfo;
  15. PROCESS_INFORMATION pInfo;
  16.  
  17. ZeroMemory(&sInfo, sizeof(STARTUPINFO));
  18.  
  19.  
  20. CreateProcess(_T("C:\\Windows\\Notepad.exe"),
  21. NULL, NULL, NULL, FALSE, 0, NULL, NULL, &sInfo, &pInfo);
  22. }
  23. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) {
  24. HWND hWnd;
  25. MSG lpMsg;
  26.  
  27.  
  28.  
  29.  
  30. w.lpszClassName = L"MyAppClass"; //имя программы
  31. w.hInstance = hInstance; //идентификатор текущего приложения
  32. w.lpfnWndProc = WndProc; //указатель на функцию окна
  33. w.hCursor = LoadCursor(NULL, IDC_ARROW); //загружаем курсор
  34. w.hIcon = 0;
  35. w.lpszMenuName = 0;
  36. hBrush = CreateSolidBrush(RGB(0, 0, 255));
  37. w.hbrBackground = hBrush;
  38.  
  39.  
  40. w.style = CS_HREDRAW | CS_VREDRAW;
  41. w.cbClsExtra = 0;
  42. w.cbWndExtra = 0;
  43.  
  44. //Если не удалось зарегистрировать класс окна - выходим
  45. if (!RegisterClass(&w))
  46. return 0;
  47.  
  48. //Создадим окно в памяти, заполнив аргументы CreateWindow
  49. hWnd = CreateWindow(L"MyAppClass", //Имя программы
  50. L"Грфические возможности Win32 API", //Заголовок окна
  51. WS_OVERLAPPEDWINDOW, //Стиль окна - перекрывающееся
  52. CW_USEDEFAULT, //положение окна на экране по х
  53. CW_USEDEFAULT, //положение по у
  54. 320, //ширина
  55. 240, //высота
  56. HWND_DESKTOP, //идентификатор родительского окна
  57. (HMENU)NULL, //идентификатор меню
  58. (HINSTANCE)hInstance, //идентификатор экземпляра программы
  59. (HINSTANCE)NULL); //отсутствие дополнительных параметров
  60.  
  61. //Выводим окно из памяти на экран
  62. ShowWindow(hWnd, nCmdShow);
  63.  
  64. //Обновим содержимое окна
  65. UpdateWindow(hWnd);
  66.  
  67. //Цикл обработки сообщений
  68.  
  69. while (GetMessage(&lpMsg, NULL, 0, 0)) {
  70. TranslateMessage(&lpMsg);
  71. DispatchMessage(&lpMsg);
  72. }
  73.  
  74. return(lpMsg.wParam);
  75.  
  76. DestroyWindow(hWnd);
  77. UnregisterClass(L"MyAppClass", hInstance);
  78. DeleteObject(hBrush);
  79. return 0;
  80. }
  81.  
  82. //Функция окна
  83. LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam) {
  84. HDC hdc; //создаём контекст устройства
  85. PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
  86. (RegisterHotKey(
  87. hWnd,
  88. 1,
  89. MOD_CONTROL,
  90. 0x51));
  91. (RegisterHotKey(
  92. hWnd,
  93. 2,
  94. MOD_SHIFT,
  95. 0x43));
  96.  
  97.  
  98.  
  99. int x = 0, y = 0;
  100.  
  101. //Цикл обработки сообщений
  102. switch (messg) {
  103. case WM_LBUTTONDOWN:
  104.  
  105. hdc = GetDC(hWnd);
  106.  
  107. hBrush = CreateSolidBrush(RGB(255, 0, 0)); //задаём сплошную кисть, закрашенную цветом RGB
  108. SelectObject(hdc, hBrush); //делаем кисть активной
  109.  
  110. x = LOWORD(lParam);//координаты с которыми нажата мышь - аргументы WndProc
  111. y = HIWORD(lParam);
  112.  
  113. x /= N;
  114. y /= N;
  115.  
  116. Ellipse(hdc, x * N, y * N, x * N + N, y * N + N);
  117.  
  118. ReleaseDC(hWnd, hdc);
  119.  
  120.  
  121. break;
  122.  
  123. //сообщение рисования
  124. case WM_PAINT:
  125.  
  126. HPEN hPen;
  127. hPen = CreatePen(PS_DASHDOT, 2, RGB(255, 0,0));
  128. hdc = BeginPaint(hWnd, &ps);
  129. int i;
  130.  
  131. for (i = 1; i <= 10; i++) {
  132. MoveToEx(hdc, 0, i * N, NULL);
  133. SelectObject(hdc, hPen);
  134. LineTo(hdc, N*10, i * N);
  135. MoveToEx(hdc, i * N, 0, NULL);
  136. SelectObject(hdc, hPen);
  137. LineTo(hdc, i * N, N*10);
  138. }
  139.  
  140. EndPaint(hWnd, &ps);
  141. DeleteObject(hPen);
  142. break;
  143.  
  144. case WM_KEYUP:
  145.  
  146. if (wParam == VK_RETURN) {
  147. PAINTSTRUCT ps;
  148. lineColor = RGB(rand() % 255, rand() % 255, rand() % 255);
  149.  
  150. hBrush = CreateSolidBrush(lineColor);
  151. SetClassLongPtr(hWnd, GCL_HBRBACKGROUND, (LONG)hBrush);
  152. InvalidateRect(hWnd, NULL, TRUE);
  153.  
  154. return 0;
  155. }
  156. if (wParam == VK_ESCAPE) {
  157. DestroyWindow(hWnd);
  158.  
  159. }
  160.  
  161. break;
  162. case WM_HOTKEY:
  163.  
  164. if (wParam == 1)
  165. {
  166. DestroyWindow(hWnd);
  167.  
  168.  
  169. }
  170. if (wParam == 2) {
  171. RunNotepad();
  172. }
  173. break;
  174.  
  175.  
  176.  
  177. case WM_DESTROY:
  178. PostQuitMessage(0); /* send a WM_QUIT to the message queue */
  179.  
  180.  
  181.  
  182. break;
  183.  
  184.  
  185. default:
  186. return(DefWindowProc(hWnd, messg, wParam, lParam)); //освобождаем очередь приложения от нераспознаных
  187. }
  188. return 0;
  189. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement