Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.75 KB | None | 0 0
  1. // пвыха.cpp: определяет точку входа для приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "пвыха.h"
  6. #include <iostream>
  7. #include <windows.h>
  8. #include <conio.h>
  9. #include <time.h>
  10. using namespace std;
  11. #define MAX_LOADSTRING 100
  12.  
  13. // Глобальные переменные:
  14. HINSTANCE hInst;                                // текущий экземпляр
  15. TCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
  16. TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
  17.  
  18. // Отправить объявления функций, включенных в этот модуль кода:
  19. ATOM                MyRegisterClass(HINSTANCE hInstance);
  20. BOOL                InitInstance(HINSTANCE, int);
  21. LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
  22. INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
  23.  
  24. int APIENTRY _tWinMain(HINSTANCE hInstance,
  25.                      HINSTANCE hPrevInstance,
  26.                      LPTSTR    lpCmdLine,
  27.                      int       nCmdShow)
  28. {
  29.     UNREFERENCED_PARAMETER(hPrevInstance);
  30.     UNREFERENCED_PARAMETER(lpCmdLine);
  31.  
  32.     // TODO: разместите код здесь.
  33.     MSG msg;
  34.     HACCEL hAccelTable;
  35.  
  36.     // Инициализация глобальных строк
  37.     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
  38.     LoadString(hInstance, IDC_MY, szWindowClass, MAX_LOADSTRING);
  39.     MyRegisterClass(hInstance);
  40.  
  41.     // Выполнить инициализацию приложения:
  42.     if (!InitInstance (hInstance, nCmdShow))
  43.     {
  44.         return FALSE;
  45.     }
  46.  
  47.     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY));
  48.  
  49.     // Цикл основного сообщения:
  50.     while (GetMessage(&msg, NULL, 0, 0))
  51.     {
  52.         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
  53.         {
  54.             TranslateMessage(&msg);
  55.             DispatchMessage(&msg);
  56.         }
  57.     }
  58.  
  59.     return (int) msg.wParam;
  60. }
  61.  
  62.  
  63.  
  64. //
  65. //  ФУНКЦИЯ: MyRegisterClass()
  66. //
  67. //  НАЗНАЧЕНИЕ: регистрирует класс окна.
  68. //
  69. //  КОММЕНТАРИИ:
  70. //
  71. //    Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
  72. //    был совместим с системами Win32, не имеющими функции RegisterClassEx'
  73. //    которая была добавлена в Windows 95. Вызов этой функции важен для того,
  74. //    чтобы приложение получило "качественные" мелкие значки и установило связь
  75. //    с ними.
  76. //
  77. ATOM MyRegisterClass(HINSTANCE hInstance)
  78. {
  79.     WNDCLASSEX wcex;
  80.  
  81.     wcex.cbSize = sizeof(WNDCLASSEX);
  82.  
  83.     wcex.style          = CS_HREDRAW | CS_VREDRAW;
  84.     wcex.lpfnWndProc    = WndProc;
  85.     wcex.cbClsExtra     = 0;
  86.     wcex.cbWndExtra     = 0;
  87.     wcex.hInstance      = hInstance;
  88.     wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY));
  89.     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
  90.     wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
  91.     wcex.lpszMenuName   = MAKEINTRESOURCE(IDC_MY);
  92.     wcex.lpszClassName  = szWindowClass;
  93.     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
  94.  
  95.     return RegisterClassEx(&wcex);
  96. }
  97.  
  98. //
  99. //   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
  100. //
  101. //   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
  102. //
  103. //   КОММЕНТАРИИ:
  104. //
  105. //        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
  106. //        создается и выводится на экран главное окно программы.
  107. //
  108. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
  109. {
  110.    HWND hWnd;
  111.  
  112.    hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
  113.  
  114.    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
  115.       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  116.  
  117.    if (!hWnd)
  118.    {
  119.       return FALSE;
  120.    }
  121.  
  122.    ShowWindow(hWnd, nCmdShow);
  123.    UpdateWindow(hWnd);
  124.  
  125.    return TRUE;
  126. }
  127. //
  128. //  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
  129. //
  130. //  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
  131. //
  132. //  WM_COMMAND  - обработка меню приложения
  133. //  WM_PAINT    -Закрасить главное окно
  134. //  WM_DESTROY   - ввести сообщение о выходе и вернуться.
  135. //
  136. //
  137. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  138. {
  139.     int wmId, wmEvent;
  140.     static POINT screen;
  141.     static HBRUSH stick=CreateSolidBrush(RGB(200,200,200));
  142.     static HBRUSH stickc=CreateSolidBrush(RGB(100,100,100));
  143.     static HBRUSH *circle_c = new HBRUSH [];
  144.     static HRGN stick_main,stick_bottom,*circle=new HRGN [];
  145.     static int count=5;
  146.     PAINTSTRUCT ps;
  147.     HDC hdc;
  148.     srand(time(0));
  149.     switch (message)
  150.     {
  151.     case WM_CREATE:
  152.         for (int i=1;i<count+1;i++)
  153.         {
  154.             circle_c[i]=CreateSolidBrush(RGB(rand()%255,rand()%255,rand()%255));
  155.             circle[i]=CreateRoundRectRgn((screen.x/2)-20-i*2,screen.y-60-40*i,(screen.x/2)+20-i*2,screen.y-20-40*i,5,5);
  156.         }
  157.         break;
  158.     case WM_SIZE:
  159.         screen.x=LOWORD(lParam);
  160.         screen.y=HIWORD(lParam);
  161.         stick_main=CreateRoundRectRgn((screen.x/2)-20,20,(screen.x/2)+20,screen.y-20,5,5);
  162.         stick_bottom=CreateRoundRectRgn((screen.x/2)-100,screen.y-60,(screen.x/2)+100,screen.y-20,5,5);
  163.         break;
  164.     case WM_COMMAND:
  165.         wmId    = LOWORD(wParam);
  166.         wmEvent = HIWORD(wParam);
  167.         // Разобрать выбор в меню:
  168.         switch (wmId)
  169.         {
  170.         case IDM_ABOUT:
  171.             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
  172.             break;
  173.         case IDM_EXIT:
  174.             DestroyWindow(hWnd);
  175.             break;
  176.         default:
  177.             return DefWindowProc(hWnd, message, wParam, lParam);
  178.         }
  179.         break;
  180.     case WM_PAINT:
  181.         hdc = BeginPaint(hWnd, &ps);
  182.         FillRgn(hdc,stick_main,stick);
  183.         FrameRgn(hdc,stick_main,stickc,2,2);
  184.         FillRgn(hdc,stick_bottom,stick);
  185.         FrameRgn(hdc,stick_bottom,stickc,2,2);
  186.         for (int i=0;i<count;i++)
  187.         {
  188.             FillRgn(hdc,circle[i],circle_c[i]);
  189.         }
  190.         EndPaint(hWnd, &ps);
  191.         break;
  192.     case WM_DESTROY:
  193.         PostQuitMessage(0);
  194.         break;
  195.     default:
  196.         return DefWindowProc(hWnd, message, wParam, lParam);
  197.     }
  198.     return 0;
  199. }
  200.  
  201. // Обработчик сообщений для окна "О программе".
  202. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  203. {
  204.     UNREFERENCED_PARAMETER(lParam);
  205.     switch (message)
  206.     {
  207.     case WM_INITDIALOG:
  208.         return (INT_PTR)TRUE;
  209.  
  210.     case WM_COMMAND:
  211.         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
  212.         {
  213.             EndDialog(hDlg, LOWORD(wParam));
  214.             return (INT_PTR)TRUE;
  215.         }
  216.         break;
  217.     }
  218.     return (INT_PTR)FALSE;
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement