Тарасов В.Л. Лекция. Создание оконных приложений в Visual
←
→
Транскрипция содержимого страницы
Если ваш браузер не отображает страницу правильно, пожалуйста, читайте содержимое страницы ниже
Тарасов В.Л. Лекция. Создание оконных приложений в Visual Studio Рассмотрим, кратко, создание оконных приложений в среде разработки Visual Studio 2005 корпорации Microsoft. Выбор типа проекта После загрузки Visual Studio выполним команду File, New, Project. Появится диалог (рис. 1), на котором надо выбрать язык программирования и тип вновь создаваемого проекта. Рис. 1. Выбор типа проекта, задание имени и расположения Для создания приложения с оконным интерфейсом на языке C++ выбираем в поле Projects types (слева) тип проекта CLR. (Common Language Runtime – общая языковая среда выполнения), в поле Templates (справа) – шаблон приложения Windows Form Application (Приложение с оконными формами). Далее, в поле Name нужно ввести имя проекта. Введем RoundBrackets – круглые скобки, при этом в папке, указанной в поле Location, будет создана папка с именем проекта. Каждый проект входит в состав Решения (Solution). Одно решение может содержать несколько проектов. Из списка Solution можно выбрать Create new Solution (Создать новое решение) или Add to Solution (Добавить к решению). В первом случае будет создано новое решение в той же папке, что и проект, во втором случае новый проект будет добавлен в существующее решение, расположенное в папке, указанной в поле Name. Если установить флажок Create directory for solution (Создать каталог для решения), будет 1
создана новая папка для решения, имя которой можно указать в поле Solution Name (Имя решения), и в этой новой папке для решения будет создана вложенная папка для проекта. Файл проекта имеет расширение .vcproj, файл решения – .sln. Среда разработки После нажатия OK на рис. 1 развернется среда разработки (рис. 2). Рис. 2. Среда разработки Visual Studio В соответствии с выбором, сделанном на рис. 1, будет создана заготовка оконного приложения, включающая пустое окно (форму). Визуальные компоненты, размещаемые на форме, берутся из окна Toolbox, которое выводится командой View, Toolbox (Ctrl+Alt+X). Чтобы разместить на форме новый компонент, достаточно выбрать его и нарисовать мышкой на форме прямоугольник. На рис. 2 выделена кнопка Анализ, свойства которой можно видеть в окне Properties, которое выводится командой Properties контекстного меню. Надпись на кнопке задается свойством Text, имя кнопки – свойством Name. Элементы проекта показываются в окне Проводника решения (Solution Explorer), выводимого командой View, Solution Explorer (комбинация клавиш Ctrl+Alt+L). Рассмотрим наиболее важные элементы проекта. Файл Form1.h содержит пространство имен проекта, в котором содержится объявление класса формы. Для переключения между режимами визуальной работы с формой и режимом работы с кодом служат команды View, Code и View, Designer. Файл кода, имя которого совпадает с именем проекта (RoundBrackets.cpp) содержит главную функцию программы main. Среда предоставляет возможность гибкой настройки своего внешнего вида. Окна, входящие в состав среды могут по-разному располагаться и группироваться. Свойствами окон среды можно управлять командами контекстного меню (рис. 3) 2
Рис. 3. Контекстное меню окно среды Visual Studio Если выбрать режим Floating, то у окна можно произвольно изменять размеры и перемещать по экрану. Несколько окон, для которых выбран режим Dockable, можно расположить в одном общем окне и переключаться между ними, используя ярлыки внизу, например, на рис. 4 показаны два окна Property Manager и Solution Explorer, являющиеся страницами одного общего окна. Рис. 4. Окна в режиме Dockable, представленные как страницы одного окна В режиме Tabbed Document окна становятся страницами одного общего окна документа и доступны по закладкам, например, на рис. 2 видны закладки Form1.h, Form1.h (Design) и RoundBrackets.cpp. Компиляция и запуск приложения Для компиляции файла, содержащего исходный код (*.cpp) можно вызвать для него в окне Project Explorer контекстное меню и выбрать из него команду Compile. Построение рабочей программы с компиляцией ее компонентов выполняется командами меню Build: Build или ReBuild . При выполнении последней команды производится перекомпиляция всех модулей проекта. Для выполнения программы следует использовать команду Debug, Start Debugging (F5) или Debug, Start Without Debugging (Ctrl+F5). Анализ правильности расстановки круглых скобок Разработаем приложение, которое будет анализировать правильность расстановки круглых скобок в заданном выражении. Далее приведен пример выражения, скобки в котором последовательно пронумерованы x+(y + z *(t-s) + 2(x - y))-4(u + v) 1 2 3 4 56 7 8 Для анализа правильности расстановки скобок будем перебирать строку с выражением символ за символом и номера открывающих скобок помещать в стек, а когда встретится закрывающая скобка, извлекать из стека номер открывающей скобки и печатать номера открывающей и соответствующей ей закрывающей скобки. Для приведенного выражения должно быть напечатано: 2 3 4 5 3
1 6 7 8 Для выражения x+(y + z *(t-s) + 2(x - y))-4(u + v 1 2 3 4 56 7 2 3 4 5 1 6 7 - А для выражения x+y + z *(t-s) + 2(x - y))-4(u + v) 1 2 3 45 6 7 должно быть напечатано 1 2 3 4 - 5 6 7 Для реализации изложенного метода анализа расстановки скобок следует разработать технику работы со стеком. На рис. 5 показана форма с размещенными на ней компонентами и указаны имена компонентов. Метка (Label) label1 Текстовое окно (TextBox) txtExp Метка(Label) label2 Кнопка (Button) Текстовое окно btnAnalysis (TextBox) txtRes Метка (Label) lblErrorMess Рис. 5. Форма и компоненты Поясняющий текст размещен в метках (Label). Метка lblErrorMess предназначена для вывода сообщений об ошибках. Ее свойство Text формируется программой. Чтобы эта метка была заметна на форме, выберем для ее свойства BorderStyle значение FixedSingle. У текстового окна txtRes нужно установить свойству Multiline значение true, чтобы в нем можно было размещать многострочный текст, и выбрать для свойства ScrollBars значение Vertical, чтобы у него была вертикальная линейка прокрутки. Добавление в проект класса Реализуем стек в виде отдельного класса. Выполним команду Project, Add Class (рис. 6). 4
Рис. 6. Добавление в проект класса После нажатия кнопки Add начнет работать мастер, который предложит указать имя класса, задать имя заголовочного файла модуля класса и файла реализации (рис. 7). По умолчанию предлагается для имени модуля использовать имя класса. Рис. 7. Ввод имени класса и имен файлов В заголовочный файле TStck.h поместим следующий код с объявление класса стеков из целых чисел, реализованный в виде массива. // Файл TStck.h // Стек из целых чисел #define MemSize 25 // Максимальный размер стека class TStck{ protected: int Mem[MemSize]; // Массив целых для стека int Top; // Индекс вершины стека public: TStck () { Top = -1;} // Конструктор. Вначале стек пуст // IsEmpty: проверка, не пуст ли стек bool IsEmpty (void) const {return Top ==-1;} 5
// IsFull: проверка, не исчерпана ли память bool IsFull (void) const {return Top == MemSize - 1;} // Put: положить новый элемент в стек void Put (const int Val) {Mem[++Top] = Val;} // Get: извлечь элемент из вершины стека int Get (void) {return Mem[Top--];} }; Так как вся реализация класса выполнена в заголовочном файле, файл реализации Tstck.cpp будет пустой. Чтобы класс TStck был доступен в модуле формы, включим в начало файла Form1.h директиву #include "TStck.h" Обработчики событий Выделим в среде разработки кнопку, как это показано на рис. 2, и выведем окно свойств (Properties) командой контекстного меню. С помощью кнопки выведем в окне Properties события кнопки (рис. 8) и дважды щелкнем по событию Click. Рис. 8. Выбор события компонента В класс формы, описание которого находится в файле Form1.h, будет автоматически добавлена заготовка обработчика события щелчка по кнопке, текст которой приводится далее. private: System::Void btnAnalyses_Click(System::Object^ sender, System::EventArgs^ e) { } Наполним эту пустую заготовку необходимым кодом, который приведен ниже. private: System::Void btnAnalysis_Click(System::Object^ sender, System::EventArgs^ e) { 6
txtRes->Text = ""; // Очистка поля результата lblErrorMess->Text = ""; // Очистка метки для сообщения об ошибке TStck Brack; // Стек для открывающих скобок int i; int CountBr = 0; // Счетчик скобок int n = 0; // Количество строк анализа String^ s = txtExpr->Text; // Анализируемая строка String^ mess; //Строка с сообщением о парах скобок array^ tempArray = gcnew array(0); // Массив строк for(i = 0; i < s->Length; i++){ // Перебор символов выражения if(s[i] == '(') // Открывающая скобка if(Brack.IsFull()){ lblErrorMess->Text = "Слишком много открывающих скобок"; return; } else Brack.Put(++CountBr); // Добавление номера открывающей // скобки в стек else if(s[i] == ')'){ // Закрывающая скобка ++CountBr; // Увеличиваем счетчик скобок if(!Brack.IsEmpty()){ // Если стек не пуст, берем номер int OpBr = Brack.Get(); // открывающей скобки из стека mess = Convert::ToString(OpBr); // Преобр. номера в строку mess += (" " + Convert::ToString(CountBr)); // Преобр. Номера } // закрывающей скобки в строку и добавление ее к сообщению else // Если стек пуст mess = "- " + Convert::ToString(CountBr); tempArray->Resize(tempArray, n + 1); // Увеличение размера // массива строк на 1 tempArray[n++ ] = mess; // Запоминаем новую строку в } // массиве строк } while(!Brack.IsEmpty()){ // Извлечение из стека непарных открывающих mess = Convert::ToString(Brack.Get()) + " -"; // скобок tempArray->Resize(tempArray, n + 1); tempArray[n++] = mess; } txtRes->Lines = tempArray; // Отображения строк анализа в окне // редактирования } На рис.9 приведены результаты анализа четырех выражений. 7
Рис. 9. Результаты работы программы 8
Вы также можете почитать