Тарасов В.Л. Лекция. Создание оконных приложений в Visual

Страница создана Ждан Поздняков
 
ПРОДОЛЖИТЬ ЧТЕНИЕ
Тарасов В.Л. Лекция. Создание оконных приложений в 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
Тарасов В.Л. Лекция. Создание оконных приложений в Visual
создана новая папка для решения, имя которой можно указать в поле 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
Вы также можете почитать