Борис Пахомов Санкт Петербург бхв петербург 2013 удк 004. 4 Ббк 32. 973. 26018. 2 П
Скачать 17.38 Mb.
|
Глава Работа с наборами данных. Общие сведения о базах данных Глава Управление исключительными ситуациями Глава Преобразование между нерегулируемыми и регулируемыми режим CLR) указателями ГЛАВА Продолжение изучения среды Visual В главе 1 мы рассмотрели структуру главного окна среды разработки программа также увидели, что все программы пользователя оформляются в качестве приложений к среде и помещаются в специальные конструкции, называемые проектами. Там же мы научились составлять консольные приложения. В этой и последующих главах мы изучим, как разрабатывать уже более сложные приложения с графическими интерфейсами. В частности, мы займемся созданием приложений с так называемыми формами. В изучаемой среде такие приложения называются Windows Form Application. Окно такого приложения показано на рис. 10.1. Из главы 1 нам известно, что множество окон, с которыми работает среда программирования, может перемещаться в рамках рабочего стола совершенно причудливым образом в рамках того или иного проекта. Причем положение окон, как и сам проект, автоматически сохраняется средой после каждого изменения содержимого рабочего стола. Поэтому если вы случайно разместили окна на рабочем столе так, что вам становится неудобно сними работать, вернитесь к виду рабочего стола, предусмотренному по умолчанию. Это выполняется опцией главного меню Window | Reset Window | Layout. Вот от этого вида мы и станем отталкиваться рис. 10.2). В правой части этого главного окна прямо по его торцу расположены две вкладки, обеспечивающие появление соответственно двух окон (рис. 10.3). Первое окно информирует о связях баз данных, с которыми работает ваше приложение, второе окно содержит перечень компонентов среды проектирования приложений, которые могут помещаться в формы. Более подробно работу каждой из частей главного окна (рабочего стола) мы будем рассматривать по мере дальнейшего изучения материала. Создание проекта Чтобы приступить к разработке новой программы (те. приложения, надо выполнить команду File | New | Project. Откроется диалоговое окно для выбора типа приложения, где нужно выполнить пронумерованные на рис. 10.4 действия. 198 Часть II. Приложения Windows Рис 1 0 .1 . Вид главного окна для приложений типа Глава 10. Продолжение изучения среды Visual C++ 199 Рис 10.2. Вид рабочего стола, принятый по умолчанию Рис. 10.3. Окно вкладок Toolbox и Server Explorer 200 Часть II. Приложения Windows Рис 1 0 .4 . Диалоговое окно для выбора типа приложения Глава 10. Продолжение изучения среды Visual C++ 201 После нажатия кнопки Она рабочем столе появится объект, который называется формой (рис. 10.5). Если окна Properties по каким-то причинам на экране нет, надо открыть контекстное меню формы ив нем выполнить команду (опцию) Properties. Окно свойств формы появится на экране (рис. 10.5). Рис 10.5. Загрузка формы на рабочий стол Новый проект можно создать и с помощью кнопки быстрого вызова New Project третья слева в строке, расположенной ниже строки с опциями главного меню. Итак, в результате действий по созданию приложения, мы увидим на экране объект, называемый формой, — это экземпляр класса Form . Одновременно с этими действиями среда IDE автоматически создает файлы проекта (структура проекта видна в окне Solution Explorer) и среди них — программный модуль-заготовку для помещения в него программ-обработчиков событий компонентов, которые будут размещены в форме. Чтобы увидеть этот модуль, надо открыть контекстное меню формы и выполнить в нем команду View Code (показать код. При этом в верхней части окна проектирования, где находится форма, появится вкладка Form1.h, а в ней — программный модуль. Заметьте, что экземпляр класса Form , который виден на рабочем столе (те. сама форма, действительно является наследником класса Form и получил имя Form1 . Кроме того, класс Form1 имеет квалификатор ref , говорящий о том, что приложение будет работать в среде CLR, тес автоматическим сборщиком мусора. Если по каким-либо причинам форма невидна (например, случайно была закрыта 202 Часть II. Приложения Windows вкладка Form1.h [Design]), то, чтобы форма появилась на рабочем столе, следует выполнить опцию View Designer контекстного меню элемента Form1.h курсор мыши надо установить в поле с операторами программы и нажать правую кнопку мыши. Как известно, контекстное меню любого элемента открывается, если щелкнуть на этом элементе правой кнопкой мыши. Форма — это главное действующее лицо при создании проекта в среде VC++. Это главный контейнер, в котором размещаются компоненты самой среды. С помощью этих компонентов и реализуется конкретный алгоритм определенной задачи. Все построено именно так, что сначала надо открыть пустую форму либо припер- воначальном создании проекта, либо, добавляя новую пустую форму к уже существующим формам проекта, если этого требует алгоритм решения задачи. Но без открытия пустой формы не обойтись. Когда форма появится на экране, в нее в соответствии с имеющимся алгоритмом задачи помещают необходимые компоненты из палитры (те. из набора компонентов среды, придают свойствам компонентов необходимые значения и определяют реакции на события компонентов. Реакции задаются в программах, которые называются обработчиками событий. Все программы-обработчики событий компонентов, расположенных в данной форме, помещаются в тот же программный модуль, который создается вместе с появлением формы на экране (Form1.h, например. Итак, мы получили на экране пустую форму. Поскольку по правилам проектирования в дальнейшем в форму надо будет помещать компоненты (а их мы будем брать из палитры компонентов, расположенных в окне вкладки Toolbox), то может потребоваться изменение размеров формы. Это делается протяжкой формы за анкерные точки — небольшие квадратики, выделенные по углами сторонам формы. Кроме того, зацепившись за заголовки окон, можно перетащить окна в удобное для вас место рабочего стола. Когда вы создадите проект, его надо сохранить (вообще-то среда сама автоматически все сохраняет) командой Save All (подменю опции File главного меню, после чего проект следует откомпилировать и построить (нажав клавишу Язык VC++ в момент создания проекта (приложения) создает массу различных файлов. Ноне все файлы, которые создает среда разработки, включаются в тот или иной проект. Это зависит от типа создаваемого проекта и от тех опций, которые вы выбираете, когда пользуетесь Мастером создания проекта. Изучая предыдущий материал, вы, наверное, заметили, что при создании проекта только отвечали на вопросы, делая тот или иной выбор. Это работала специальная программа, которая и называется Мастером. Глава 10. Продолжение изучения среды Visual C++ 203 В табл. 10.1 приведены собственно проектные файлы. Следует отметить, что не все проектные файлы отражены в Solution Explorer (точнее сказать, там отражен только самый минимум. Если перевести проект в режим Show All Files (показать все файлы) с помощью аналогичной опции из подменю Project главного меню среды, тов файлы покажутся все равно не все некоторые файлы будут скрыты даже тогда, когда проект находится в режиме Show All Files. Таблица 10.1. Проектные файлы Имя файла Описание Form1.h h- файл, содержащий описание формы и всех ее компонентов app.rc Файл ресурсов проекта, записанный в виде сценария, который в зависимости от типа проекта содержит описание диалоговых окон, панелей инструментов, пиктограмм, версии проекта и др Здесь хранится пиктограмма программы resource.h Этот заголовочный файл содержит определения ресурсов, используемых в проекте, сгенерированных из файла app.rc stdafx.h Этот файл используется для построения предкомпиляционного заголовочного файла и предкомпиляционных объектных файлов Этот файл содержит информацию по сборке проекта (файлы, ресурсы, типы и т. п. ) stdafx.cpp Здесь содержится информация для создания предкомпиляционных файлов Имя проекта.cpp Содержит обычную команду int main() , с которой мы встречались при изучении С, оператор include , подключающий h - файл, содержащий описание формы и всех ее компонентов. То есть это программа проекта на языке С++ Имя Реше- ния.sln Этот файл относится к категории группы проектов, объединенных водно Решение. Он организует все элементы проекта (проектов) водно общее Решение Projname.vcproj Это главный файл проекта для приложений VC++, генерируемых с использованием Мастера Приложений — программы, формирующей приложения на основании диалога с пользователем, создающим приложение. Он содержит информацию о версии среды разработки, платформе, на которой создается приложение, и свойствах созданного проекта В этом файле описываются некоторые файлы созданного проекта рис 10.6) Уточним, что файлы stdax.h, stdafx.cpp используются для создания предварительно компилируемого заголовочного файла Projname.pch и объектного файла stdafx.obj. 204 Часть II. Приложения Windows Рис 10.6. Содержание файла Окно сведений об объекте Любой объект, находящийся на рабочем столе, обладает какими-то свойствами. Например, файл из Solution Explorer имеет такое свойство, как путь к папке, в которой он расположен, компонент из палитры компонентов (например, кнопка) характеризуется своим именем, видимостью в момент исполнения, координатами в форме и т. д. Все свойства активного объекта (те. того, на котором в данный момент произведен щелчок мыши) мгновенно отражаются в специальном окне под названием Properties (свойства. Это окно может быть видимо или нет. Сделать окно видимым можно, открыв контекстное меню любого объекта в форме (или самой формы) и выполнив в нем опцию Properties. Вид этого элемента рабочего стола показан на рис. 10.7. Глава 10. Продолжение изучения среды Visual C++ 205 В окне имеется 5 вкладок — упорядочивает содержимое окна по категориям информации — упорядочивает содержимое окна по алфавиту — показывает перечень свойств (это видно на рисунке — показывает перечень событий, связанных с объектом — выводит на экран так называемые "страницы свойства. Рис 10.7. Окно сведений об объекте Вкладка Вкладка Events содержит список возможных событий, которые могут происходить с компонентом. Она позволяет связывать каждое событие с программой-обра- ботчиком этого события. Если для активного компонента щелкнуть мышью на вкладке Events, то появится окно со списком событий для активного компонента. Из списка выбирается то событие, которое требуется обработать. Например, нажатие кнопки, помещенной в форму (те. щелчок мыши на кнопке. После определения события следует дважды щелкнуть мышью в поле рядом с именем события. При этом VC++ создаст в модуле программы формы, в которую помещен компонент, программу-обработчик этого события. Это будет функция с заголовочной частью, нос пустым телом — не программа, а заготовка программы. В это пустое тело заготовки вы должны вписать свои команды, которые будут определять реакцию компонента на данное событие с учетом передаваемых функции фактических значений ее параметров. 206 Часть II. Приложения Windows Вид пустого обработчика события OnClick кнопки Button1 будет таким private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ Вид окна Properties объекта для этого случая показан на рис. 10.8. Рис 10.8. Вид окна Properties объекта с событием Событие OnClick означает, что произошла реакция на щелчок мыши на кнопке. В созданной заготовке программы-обработчика вы можете написать реакцию объекта на событие OnClick . Допустим, мы хотим, чтобы реакция на нажатие кнопки была такой в форме должен быть нарисован красный круг (это уже будет делаться с помощью другого компонента. При создании обработчика идет автоматическое переключение системы на вызов редактора кода, который установит курсор на начало обработчика, чтобы вы могли вводить команды программы. Кстати, создать обработчик события для кнопки можно было бы более простым способом — дважды щелкнуть на кнопке. В окне Properties для формы ниже слова Properties справа расположена кнопка раскрывающегося (выпадающего) списка (с треугольной стрелкой. В этом списке находятся не только имена всех компонентов, помещенных в форму, но и имя активной в данный момент формы. С помощью этого списка мы можем выбирать любой компонент, помещенный в форму, и работать с ним. Для этого надо только щелкнуть на имени нужного компонента мышью, который сразу станет помеченным (те. активными в окне Properties появятся данные уже поэтому (активному) компоненту. Таким образом, в списке можно легко переключаться с одного компонента на другой. Глава 10. Продолжение изучения среды Visual C++ 207 Заранее скажем, что приложение может содержать и более одной формы. Для каждой из них создается свой программный модуль, имя которого высвечивается на вкладке страниц проекта. Вкладки расположены в заголовочной части окна, в которое помещается форма. Переключая вкладки модулей, мы тем самым переключаемся с одной формы на другую. Вкладка Property Это интерфейсный элемент (те. элемент, обеспечивающий общение между средой разработки и пользователем, который позволяет задавать установки элементов проекта. Когда мы дважды щелкаем на этой вкладке (если она доступна для данного объекта для некоторых объектов эта страница блокирована, то открывается диалоговое окно, в котором можно задавать определенные настройки. Чтобы открыть диалоговое окно для проекта, проще войти в опцию Project главного меню рабочего стола и выполнить в выпавшем меню команду Properties. Диалоговое окно вкладки Property Pages показано на рис. 10.9. Рис 10.9. Диалоговое окно для настройки свойств проекта Работа с окном сведений об объекте Ширину столбцов в окне Properties можно менять, перетаскивая мышью разделительные линии (как и само окно можно перетаскивать в любое место экрана по обычным правилам перетаскивания окон в Windows). Окно Properties имеет свое контекстное меню, которое, как и любое контекстное меню Windows, открывается с помощью щелчка правой кнопки мыши (предварительно надо поместить курсор мыши в поле окна) и содержит такие же команды, относящиеся к перемещению 208 Часть II. Приложения Windows этого документа, как и любое другое окно. То есть это окно может перемещаться, захватываться другим окном, само захватывать другое окно. Если вам неудобно работать с документами, постоянно перекрывающимися другими окнами (когда приходится какой-то документ постоянно перемещать в удобное для обозрения место экрана, то лучше прикрепить его к общему документу проекта (к главному окну рабочего стола) вкладкой и работать с ним, переключаясь на его вкладку. Но если вам требуется обращаться к документу вовремя работы с другими вкладками проекта, то это свойство должно быть отключено — и документ тогда будет постоянно на виду. Выбор опции Hide контекстного меню делает документ невидимым на экране. Чтобы снова увидеть документ (в частности, его свойства, надо открыть контекстное меню (например, формы) и выбрать команду Properties. Для документа Solution Explorer надо выполнить команду с таким же названием в опции View главного меню проекта. Редактор кода, модуль и режим дизайна (проектирования. Указатель Под редактором кода мы понимаем программное средство, обеспечивающее работу с текстом программного модуля. Когда говорят "программный код" или "код программы, имеют ввиду программу, написанную на каком-либо языке программирования, те. текст, закодированный на конкретном языке. Часто можно встретить эквивалентное понятие "текст программы. Когда открывается новая форма, к ней создается специальный программный модуль с именем формы и расширением h. В этом модуле находится описание формы и здесь же располагаются обработчики событий компонентов, участвующих в проекте. Попасть в программный модуль после загрузки проекта (когда на экране появится форма) можно с помощью комбинации клавиш Глава 10. Продолжение изучения среды Visual C++ 209 класса Form , чтобы в нее в результате наследования попали все члены класса Form , ас другой стороны, она впоследствии должна вместить другие компоненты, из которых будет строиться приложение. Кроме того, приложение может содержать несколько форм с компонентами, и этот факт надо учитывать. Разработчики VC++ вышли из этого положения следующим образом. Первая форма, вставляемая в проект, получает имя Form1. Это делается для того, чтобы отразить тот факт, что вставляемая в проект форма будет связана с наследником класса Form . Вторая и последующие формы добавляются к проекту с помощью выполнения опций Project | Add New Item, в результате чего появляется диалоговое окно рис. 10.10), где мы и задаем самостоятельно имя новой формы (в нашем случае задано имя Form2.h). Вид рабочего стола после подключения второй формы показан на рис. 10.11. Рис 10.10. Диалоговое окно для подключения к проекту новой формы Если посмотреть внимательно на программный модуль второй формы, то форма 2 построена тоже как класс-наследник класса Form потому же принципу, что и форма 1. Отметим, что все обработчики событий формируются в рамках одного класса- формы. Поэтому и обращение к любым членам класса будет идти через указатель на экземпляр этого класса. В среде VC++ это указатель this . Он всегда содержит ссылку на текущий объект. Если нам надо обратиться, например, к свойству Visible метки Label1 , помещенной в форму, то это обращение будет выглядеть так мы находимся в объекте Label1 , адрес которого помещен в указатель this ): this->Label1->Visible=true; 210 Часть II. Приложения Windows Рис 10.11. Вид рабочего стола после подключения второй формы Это говорит о том, что имена экземпляров компонентов ( Label1 — это имя экземпляра класса Label ) формируются как указатели на экземпляры. Контекстное меню редактора кода У редактора кода программы, как и у каждого объекта, есть свое контекстное меню, которое, как и все контекстные меню, открывается правой кнопкой мыши. Содержимое контекстного меню может изменяться в зависимости от места расположения курсора в тексте, выделения блока строки т. д. Вариант контекстного меню редактора кода показан на рис. 10.12. Некоторые команды из этого меню View Designer — открывает окно дизайна, в котором находится форма и ее компоненты если вы установили курсор на строке с элементом Button1 , то после выбора этой опции курсор установится на строке с объявлением экземпляра класса Button (рис. 10.13). Find All References — если вы установили курсор на строке с элементом Button1 , то после выбора этой опции в окне вывода информации, расположенном под окном редактора кода, появится перечень ссылок на строки, в которых упоминается Button (рис. 10.14). Если дважды щелкнуть на какой-то строке этого перечня, курсор установится на соответствующей строке текста в поле редактора. Глава 10. Продолжение изучения среды Visual C++ 211 Рис 10.12. Контекстное меню редактора кода Рис. 10.13. Результат выполнения опции Go To Declaration Рис 10.14. Формирование ссылок на элемент текста в поле редактора кода 212 Часть II. Приложения Windows Form Outlining — использование этой опции позволяет свертывать/развертывать код модуля, переключаться между этими режимами, делать выбранный участок невидимыми др. Суфлер кода (подсказчик) Этот инструмент среды проектирования помогает быстрее и правильнее набирать код программы — он выдает оперативную информацию (подсказку) при наборе кода. К сожалению, в версии подсказчик не работает. Если вы ввели имя некоторого объекта и поставили после него точку (а это оператор прямого членства в классе или в структуре) или стрелку вправо (это оператор выбора члена класса через указатель на этот класс, то появится подсказка — имена всех членов данного класса. Остается установить (например, с помощью стрелок) линейку подсветки на нужный элемент класса или указать на него мышью и нажать клавишу , сразу же откроется окно подсказчика, в котором будут все члены объекта Form1 . Выберем код Button1 (мы только начинаем набирать этот код, как тут же появляются строки, соответствующие набранным символам, что ускоряет процесс поискав окне. Когда наберем кода затем — стрелку вправо, то после стрелки вновь появится окно подсказчика с перечнем свойств, событий. Суфлер покажет список всех элементов класса Если записанному элементу потребуется присвоить еще какие-либо свойства, то нужно воспользоваться комбинацией клавиш пробел. Справа от знака присвоения высветится перечень элементов, разрешенных к записи. Здесь нужно выбрать требуемый элемент и нажать клавишу Управление окнами редактора Вы можете работать с кодом программы в нескольких местах одновременно. Чтобы этого добиться, надо разделить окно редактора, открыв одновременно необходимое количество экземпляров окон. Один экземпляр окна может быть разбит на два отдельных окна для более удобного редактирования. Чтобы раздвоить окно, надо выполнить следующее Щелкнуть мышью в поле редактора, чтобы он получил фокус ввода. Выполнить команду главного меню Window | Split. Редактируемое поле при этом разбивается на два окна, разделенных горизонтальной полосой. Оба образовавшихся окна можно прокручивать независимо, Глава 10. Продолжение изучения среды Visual C++ 213 чтобы просматривать и редактировать их содержимое. Любые изменения, сделанные водном окне, тут же отображаются в другом, потому что это фактически два экземпляра одного итого же окна. Чтобы сделать одно окно длиннее или короче другого, следует потянуть мышью за разделительную полосу вверх или вниз. Чтобы вернуться к единственному окну, надо выполнить команду Windows | Remove Split главного меню среды. Вы также можете создать множество экземпляров редактора кода. Эта возможность позволяет открывать длинные документы в нескольких экземплярах редактора чтобы просмотреть и отредактировать по отдельности различные участки полно- размерного окна редактора. Чтобы создать новое окно, следует выполнить команду Windows | New Window главного меню среды проектирования. На рис. 10.15 показаны три созданных окна редактора. Все они разместились в виде вкладок на главном окне рабочего стола. Рис 10.15. Три окна редактора кода Настройка опций редактора через команду главного меню Настройка опций редактора выполняется через диалоговое окно, которое открывается, если выполнить команду Tools | Options главного меню среды. В открывшемся окне в левой его части надо дважды щелкнуть мышью на опции Text Editor рис. 10.16). 214 Часть II. Приложения Windows Рис 10.16. Редактирование опций редактора кода В раскрывшемся списке выбираем язык Си справа получаем три группы установок с переключателями. Рассмотрим некоторые из них Word wrap. Включенная опция позволяет "заворачивать" длинную строку, не умещающуюся в поле редактора, на вторую строку. При этом можно задать появление пиктограммы в конце заворачиваемой строки Line numbers. При включенной опции строки кода будут пронумерованы. Рис 10.17. Вид текста в поле редактора кода после установки свойств Word wrap и Line numbers Глава 10. Продолжение изучения среды Visual C++ 215 Результат установок обоих опций показан на рис. 10.17. Видим, что справа оттек- ста появилась нумерация строка в самом тексте длинная строка текста стала переноситься на другую строку. Изменение шрифта и цвета Для изменения шрифта редактора следует выполнить команду главного меню Tools | Options, в открывшемся диалоговом окне дважды щелкнуть мышью на папке Environment ив появившемся ниже списке выбрать Fonts and Colors рис. 10.18). Рис 10.18. Изменение шрифта редактора Для изменения шрифта следует выбрать соответствующий элемент редактирования, для которого требуется изменить шрифт, и подобрать ему шрифт с использованием выпадающих списков Font и Size. А цвет шрифта выбирается посредством выпадающих списков Item foreground (элемент переднего плана) и Item background (элемент фона) или после нажатия кнопки Custom, когда появляется палитра цветов для выбора необходимого цвета. Начало редактирования кода программного модуля Чтобы начать редактировать код модуля, надо открыть вкладку с именем требуемого модуля на рабочем столе, поместить курсор редактора в нужное место кода и редактировать его по правилам стандартных текстовых редакторов Windows. Код можно перетаскивать (с помощью мыши, если предварительно его выделить. 216 Часть II. Приложения Windows Чтобы поместить курсор редактора в нужное место кода, можно щелкнуть в этом месте мышью либо воспользоваться стрелками клавиатуры или клавишами 0>0> |