Advertisement
Margoshinka

WinApi1

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