Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #undef UNICODE
- #include <windows.h>
- #include <list>
- #include <string>
- using namespace std;
- #define idEditA 1001
- #define idEditB 1002
- #define idEditC 1003
- #define idButton1 1007
- #define idButton2 1008
- //функция для обработки сообщений, подробнее ниже
- LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_DESTROY: // сообщение "окно закрыто"
- PostQuitMessage(0); // послать сообщение "выход из программы"
- break;
- case WM_COMMAND: //сообщение "произошла команда"
- //смотрим какая именно команда произошла
- if(HIWORD(wParam) == BN_CLICKED)
- {
- //Если нажата одна из наших кнопок
- //Получим значения из наших текстовых полей
- HWND Edit; //переменная для хранения окна
- char text[255]; //переменная для хранения текста
- list<int> nums; //контейнер для хранения чисел
- //получим первое окно
- Edit = GetDlgItem(hWnd, idEditA);
- //и текст из него
- GetWindowText(Edit, text, sizeof(text));
- nums.push_back(atoi(text)); //добавляем полученное число в контейнер
- //получим второе окно
- Edit = GetDlgItem(hWnd, idEditB);
- //и текст из него
- GetWindowText(Edit, text, sizeof(text));
- nums.push_back(atoi(text)); //добавляем полученное число в контейнер
- //получим третье окно
- Edit = GetDlgItem(hWnd, idEditC);
- //и текст из него
- GetWindowText(Edit, text, sizeof(text));
- nums.push_back(atoi(text)); //добавляем полученное число в контейнер
- //располагаем элементы по возрастанию
- nums.sort();
- //Если была нажата кнопка по убыванию
- if(LOWORD(wParam) == idButton2)
- {
- //переворачиваем все числа задом наперёд
- nums.reverse();
- //теперь они по убыванию
- }
- //Надо вывести результат
- //сначала преобразуем всё в текстовую форму
- string result = "Последовательность: ";
- for(list<int>::iterator i=nums.begin(); i != nums.end(); i++)
- {
- char buf[255] = {0};
- itoa(*i, buf, 10);
- result += buf;
- result += " ";
- }
- //И выведем сообщение:
- MessageBox(hWnd, result.c_str(), "Результат!", MB_OK | MB_ICONINFORMATION);
- }
- break;
- default: // все остальные сообщения обрабатываются самой виндовс
- return DefWindowProc(hWnd, uMsg,wParam,lParam);
- }
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow)
- {
- //Описываем класс окна. Каждое окно принадлежит определённому классу окон
- //для своего окна нам понадобится создавать и регистрировать в системе свой класс
- WNDCLASS wcl;
- // Идентифицирует экземпляр приложения
- wcl.hInstance=hInst;
- // Имя нашего класса окна
- wcl.lpszClassName="WindowClassLab4";
- // Когда в системе происходит какое-либо событие(нажатие кнопки, клик мышкой и прочее)
- // Она посылает окну сообщение, о том что событие произошло
- // в этом параметре указывается НАША СОБСТВЕННАЯ функция, которая будет реагировать на присланные сообщения
- wcl.lpfnWndProc=WndProc;
- // Стиль класса окна. Указываем что нам надо перерисовывать окно при изменении его размеров.
- wcl.style=CS_HREDRAW | CS_VREDRAW;
- // В этом параметре указывается меню приложения
- // Меню, которое находится сразу под рамкой окна(Файл, Правка, и прочее)
- //Мы не используем меню, соответственно устанавливаем параметр нулём
- wcl.lpszMenuName=NULL;
- //Этот параметр определяет иконку проргаммы, которая отображается на панели задач
- //И при переключении задач по Alt-Tab. Указываем логотип виндовс.
- wcl.hIcon=LoadIcon(NULL,IDI_WINLOGO);
- // Этот параметр определяет как будет выглядеть курсор мыши
- //Мы указываем стрелочку, вариантов много
- //(стрелочка, часикиожидания,прицел, палочка, которая обычно появляется когда наводишь курсор на текст
- wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
- // Грубо говоря здесь указывается цвет фона окна.
- wcl.hbrBackground=(HBRUSH)(1+COLOR_WINDOW);
- //Переменные для дополнительных параметров. Мы их не используем, поэтому просто обнулим
- wcl.cbClsExtra=0;
- wcl.cbWndExtra=0;
- //После описания параметров класса окна зарегистрируем окно в системе
- //Добавим проверку удалось ли системе зарегестрировать данный класс окна
- if (!RegisterClass(&wcl))
- {
- //Если не удалось, то мы не сможем создавать окна
- //выходим из программы
- return 0;
- }
- //Теперь мы вызываем функцию для создания окна
- HWND Window = CreateWindow (
- "WindowClassLab4", // Имя класса окна, мы зарегестрировали этот класс
- "Лабораторная 4", // Заголовок окна.
- WS_OVERLAPPEDWINDOW, // Стиль окна, WS_OVERLAPPEDWINDOW - это обычное коно с рамкой, кнопками свернуть развернуть закрыть и т.п.
- 100,100, // Начальные координаты в котором появится окно, считаются от левого верхнего угла
- 375,98, // Размеры окна, ширина и высота
- HWND_DESKTOP, // Родительское окно - указываем рабочий стол
- NULL, // Меню, как я уже писал выше - меню мы не используем.
- hInst, // Дескриптор приложения-создателя
- NULL // Дополнительные данные окна, они нам ни к чему, так что NULL
- );
- //Всякие кнопки, поля для ввода текста и прочие элементы - на самом деле окна
- //Наполним наше окно содержимым, создадим 3 поля для ввода текста
- //(стандартный системный класс окна - EDIT)
- //3 надписи - стандартный класс STATIC
- //и 2 кнопки - составить убывающую и возрастающую последовательность.
- //Погодним все координаты дочерних окон(они считаются от угла родительского)
- //и в качестве родительского будем указывать не рабочий стол, а наще окно
- //Каждому окну, с которым будем работать в дальнейшем зададим свой идентификатор
- //которые были объявлены в самом начале файла
- CreateWindow("STATIC", "A:", WS_CHILD|WS_VISIBLE, 0, 0, 50, 20, Window, NULL, hInst, NULL);
- CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE|WS_BORDER, 50, 0, 50, 20, Window, (HMENU)idEditA, hInst, NULL);
- CreateWindow("STATIC", "B:", WS_CHILD|WS_VISIBLE, 0, 20, 50, 20, Window, NULL, hInst, NULL);
- CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE|WS_BORDER, 50, 20, 50, 20, Window, (HMENU)idEditB, hInst, NULL);
- CreateWindow("STATIC", "C:", WS_CHILD|WS_VISIBLE, 0, 40, 50, 20, Window, NULL, hInst, NULL);
- CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE|WS_BORDER, 50, 40, 50, 20, Window, (HMENU)idEditC, hInst, NULL);
- CreateWindow("BUTTON", "Возрастающую", WS_CHILD|WS_VISIBLE, 100, 0, 130, 60, Window, (HMENU)idButton1, hInst, NULL);
- CreateWindow("BUTTON", "Убывающую", WS_CHILD|WS_VISIBLE, 230, 0, 130, 60, Window, (HMENU)idButton2, hInst, NULL);
- //После создания окна покажем его на экране
- ShowWindow(Window, nCmdShow);
- //И "обновим" его.
- UpdateWindow(Window);
- //Теперь пришло время запустить цикл обработки сообщений
- //Получим новое сообщение от операционной системы
- //и отправим его обрабатываться в нашу оконную функцию
- //Повторим до тех пор, пока сообщения не кончатся
- MSG msg;
- while (GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment