Guest User

Untitled

a guest
Jul 21st, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.81 KB | None | 0 0
  1. #undef UNICODE
  2. #include <windows.h>
  3. #include <list>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. #define idEditA 1001
  9. #define idEditB 1002
  10. #define idEditC 1003
  11.  
  12. #define idButton1 1007
  13. #define idButton2 1008
  14.  
  15. //функция для обработки сообщений, подробнее ниже
  16. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  17. {
  18.     switch (uMsg)
  19.     {
  20.     case WM_DESTROY:                // сообщение "окно закрыто"
  21.         PostQuitMessage(0);         // послать сообщение "выход из программы"
  22.         break;
  23.     case WM_COMMAND:                //сообщение "произошла команда"
  24.         //смотрим какая именно команда произошла
  25.         if(HIWORD(wParam) == BN_CLICKED)
  26.         {
  27.             //Если нажата одна из наших кнопок
  28.             //Получим значения из наших текстовых полей
  29.  
  30.             HWND Edit; //переменная для хранения окна
  31.             char text[255]; //переменная для хранения текста
  32.  
  33.             list<int> nums; //контейнер для хранения чисел
  34.  
  35.             //получим первое окно
  36.             Edit = GetDlgItem(hWnd, idEditA);
  37.             //и текст из него
  38.             GetWindowText(Edit, text, sizeof(text));
  39.             nums.push_back(atoi(text)); //добавляем полученное число в контейнер
  40.  
  41.             //получим второе окно
  42.             Edit = GetDlgItem(hWnd, idEditB);
  43.             //и текст из него
  44.             GetWindowText(Edit, text, sizeof(text));
  45.             nums.push_back(atoi(text)); //добавляем полученное число в контейнер
  46.  
  47.             //получим третье окно
  48.             Edit = GetDlgItem(hWnd, idEditC);
  49.             //и текст из него
  50.             GetWindowText(Edit, text, sizeof(text));
  51.             nums.push_back(atoi(text)); //добавляем полученное число в контейнер
  52.  
  53.             //располагаем элементы по возрастанию
  54.             nums.sort();
  55.             //Если была нажата кнопка по убыванию
  56.             if(LOWORD(wParam) == idButton2)
  57.             {
  58.                 //переворачиваем все числа задом наперёд
  59.                 nums.reverse();
  60.                 //теперь они по убыванию
  61.             }
  62.  
  63.             //Надо вывести результат
  64.             //сначала преобразуем всё в текстовую форму
  65.  
  66.             string result = "Последовательность: ";
  67.             for(list<int>::iterator i=nums.begin(); i != nums.end(); i++)
  68.             {
  69.                 char buf[255] = {0};
  70.                 itoa(*i, buf, 10);
  71.                 result += buf;
  72.                 result += " ";
  73.             }
  74.  
  75.             //И выведем сообщение:
  76.             MessageBox(hWnd, result.c_str(), "Результат!", MB_OK | MB_ICONINFORMATION);
  77.         }
  78.         break;
  79.     default:                        // все остальные сообщения обрабатываются самой виндовс
  80.         return DefWindowProc(hWnd, uMsg,wParam,lParam);
  81.     }
  82.     return 0;
  83. }
  84.  
  85. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
  86. {
  87.     //Описываем класс окна. Каждое окно принадлежит определённому классу окон
  88.     //для своего окна нам понадобится создавать и регистрировать в системе свой класс
  89.     WNDCLASS wcl;
  90.  
  91.     // Идентифицирует экземпляр приложения
  92.     wcl.hInstance=hInst;
  93.  
  94.     // Имя нашего класса окна
  95.     wcl.lpszClassName="WindowClassLab4";
  96.  
  97.     // Когда в системе происходит какое-либо событие(нажатие кнопки, клик мышкой и прочее)
  98.     // Она посылает окну сообщение, о том что событие произошло
  99.     // в этом параметре  указывается НАША СОБСТВЕННАЯ функция, которая будет реагировать на присланные сообщения
  100.     wcl.lpfnWndProc=WndProc;
  101.  
  102.     // Стиль класса окна. Указываем что нам надо перерисовывать окно при изменении его размеров.
  103.     wcl.style=CS_HREDRAW | CS_VREDRAW;
  104.  
  105.     // В этом параметре указывается меню приложения
  106.     // Меню, которое находится сразу под рамкой окна(Файл, Правка, и прочее)
  107.     //Мы не используем меню, соответственно устанавливаем параметр нулём
  108.     wcl.lpszMenuName=NULL;
  109.  
  110.     //Этот параметр определяет иконку проргаммы, которая отображается на панели задач
  111.     //И при переключении задач по Alt-Tab. Указываем логотип виндовс.
  112.     wcl.hIcon=LoadIcon(NULL,IDI_WINLOGO);
  113.  
  114.     // Этот параметр определяет как будет выглядеть курсор мыши
  115.     //Мы указываем стрелочку, вариантов много
  116.     //(стрелочка, часикиожидания,прицел, палочка, которая обычно появляется когда наводишь курсор на текст
  117.     wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
  118.  
  119.     // Грубо говоря здесь указывается цвет фона окна.
  120.     wcl.hbrBackground=(HBRUSH)(1+COLOR_WINDOW);
  121.  
  122.     //Переменные для дополнительных параметров. Мы их не используем, поэтому просто обнулим
  123.     wcl.cbClsExtra=0;
  124.     wcl.cbWndExtra=0;
  125.  
  126.     //После описания параметров класса окна зарегистрируем окно в системе
  127.     //Добавим проверку удалось ли системе зарегестрировать данный класс окна
  128.     if (!RegisterClass(&wcl))
  129.     {
  130.         //Если не удалось, то мы не сможем создавать окна
  131.         //выходим из программы
  132.         return 0;
  133.     }
  134.  
  135.     //Теперь мы вызываем функцию для создания окна
  136.     HWND Window = CreateWindow (
  137.                 "WindowClassLab4",                  // Имя класса окна, мы зарегестрировали этот класс
  138.                 "Лабораторная 4",                   // Заголовок окна.
  139.                 WS_OVERLAPPEDWINDOW,                // Стиль окна, WS_OVERLAPPEDWINDOW - это обычное коно с рамкой, кнопками свернуть развернуть закрыть и т.п.
  140.                 100,100,                            // Начальные координаты в котором появится окно, считаются от левого верхнего угла
  141.                 375,98,                            // Размеры окна, ширина и высота
  142.                 HWND_DESKTOP,                       // Родительское окно - указываем рабочий стол
  143.                 NULL,                               // Меню, как я уже писал выше - меню мы не используем.
  144.                 hInst,                              // Дескриптор приложения-создателя
  145.                 NULL                                // Дополнительные данные окна, они нам ни к чему, так что NULL
  146.                 );
  147.  
  148.     //Всякие кнопки, поля для ввода текста и прочие элементы - на самом деле окна
  149.     //Наполним наше окно содержимым, создадим 3 поля для ввода текста
  150.     //(стандартный системный класс окна - EDIT)
  151.     //3 надписи - стандартный класс STATIC
  152.     //и 2 кнопки - составить убывающую и возрастающую последовательность.
  153.     //Погодним все координаты дочерних окон(они считаются от угла родительского)
  154.     //и в качестве родительского будем указывать не рабочий стол, а наще окно
  155.     //Каждому окну, с которым будем работать в дальнейшем зададим свой идентификатор
  156.     //которые были объявлены в самом начале файла
  157.     CreateWindow("STATIC", "A:", WS_CHILD|WS_VISIBLE, 0, 0, 50, 20, Window, NULL, hInst, NULL);
  158.     CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE|WS_BORDER, 50, 0, 50, 20, Window, (HMENU)idEditA, hInst, NULL);
  159.  
  160.     CreateWindow("STATIC", "B:", WS_CHILD|WS_VISIBLE, 0, 20, 50, 20, Window, NULL, hInst, NULL);
  161.     CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE|WS_BORDER, 50, 20, 50, 20, Window, (HMENU)idEditB, hInst, NULL);
  162.  
  163.     CreateWindow("STATIC", "C:", WS_CHILD|WS_VISIBLE, 0, 40, 50, 20, Window, NULL, hInst, NULL);
  164.     CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE|WS_BORDER, 50, 40, 50, 20, Window, (HMENU)idEditC, hInst, NULL);
  165.  
  166.     CreateWindow("BUTTON", "Возрастающую", WS_CHILD|WS_VISIBLE, 100, 0, 130, 60, Window, (HMENU)idButton1, hInst, NULL);
  167.     CreateWindow("BUTTON", "Убывающую", WS_CHILD|WS_VISIBLE, 230, 0, 130, 60, Window, (HMENU)idButton2, hInst, NULL);
  168.  
  169.  
  170.     //После создания окна покажем его на экране
  171.     ShowWindow(Window, nCmdShow);
  172.  
  173.     //И "обновим" его.
  174.     UpdateWindow(Window);
  175.  
  176.     //Теперь пришло время запустить цикл обработки сообщений
  177.     //Получим новое сообщение от операционной системы
  178.     //и отправим его обрабатываться в нашу оконную функцию
  179.     //Повторим до тех пор, пока сообщения не кончатся
  180.     MSG msg;
  181.     while (GetMessage(&msg,NULL,0,0))
  182.     {
  183.         TranslateMessage(&msg);
  184.         DispatchMessage(&msg);
  185.     }
  186.  
  187.     return 0;
  188. }
Add Comment
Please, Sign In to add comment