Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 12

Отладочные диагностические сообщения

Предотвращение включения файлов

Типичное применение препроцессорных директив

Иногда при использовании заголовков может происходить дублирование кода из-за повторного включения некоторого файла. (Допустим, у вас имеется исходный файл myprog.c, который подключает директивой # include два заголовка headerl.h и header2.h. Если, в свою очередь, оба этих файла подключают некоторый headerO.h, то последний будет дважды включен в исходный файл myprog.c. Это ни к чему, хотя обычно и не приводит к ошибке.)

Чтобы предотвратить повторное включение кода заголовочного файла, можно организовать контроль следующим образом (как говорят, “поставить часового”):

/* header0.h: Заголовочный файл, который может оказаться многократно включенным*/

#ifndef _HEADERO_H

#define _HEADERO_H

/* Здесь идут макросы, определения типов и т.д. вашего заголовочного файла*/

*endif

Переключение разделов кода

Директивы условной компиляции могут использоваться для простого переключения между двумя различными вариантами кода — старым и экспериментальным алгоритмом, например. Это можно сделать так:

/*Измените определение на 0, чтобы вернуться к старому варианту.*/

*define NEW_VER I

#if NEW_VER /* Экспериментальный код.*/

#else /* Старый код.*/

*endif

Или, если не вводить дополнительный идентификатор:

/*Измените на 1, когда новый код будет отлажен.*/

*if 0 /* Экспериментальный код.*/

#else /* Старый код.*/

*endif

При отладке программ можно с большой пользой применять макросы, генерирующие операторы вывода различных сообщений с указанием файла и номера строки, например:

#define INFO(msg) printf(#msg "\n")

#define DIAG(msg) \

printf("File " _FILE_ " Line %d: " \ #msg "\n", _LINE_)

void SomeFunc(void)

{

INFO(Entering SomeFunc.); /* Выводит информационное сообщение. */

if (someError)

DIAG(Error encountered!); /* Выводит сообщение об ошибке. */

INFO(Exiting SomeFunc...);

}


Тема: Состав проекта.

 

Программные задачи в Visual C++ оформляются в виде проектов, т.е. представляют собой набор файлов, которые совместно используются для создания одной программы.

Проекты размещаются в рабочих областях, причем одна область может содержать несколько проектов.

При создании новой рабочей области с именем New в ней автоматически создаются:

ü New.dsw – основной файл рабочей области (определяет параметры новой области);

ü New.dsp –файл проекта (определят параметры проекта);

ü New.h – заголовочный файл приложения;

ü New.срр – исходный текст приложения;

ü StdAfx.h – заголовочный файл для стандартного каркаса приложения;

ü StdAfx.cpp – исходный текст стандартного каркаса приложения;

ü MainFrm.h – заголовочный файл главного окна;

ü MainFrm.cpp – исходный текст главного окна;

ü NewDoc.h – заголовочный файл документа;

ü NewDoc.cpp – исходный текст документа;

ü NewView.h – заголовочный файл вида;

ü NewView.cpp – исходный текст вида;

ü Resource.h – файл с ресурсными константами;

ü New.rc – файл с ресурсами;

ü New.ncb – файл с информацией о представлении и взаимных связях;

ü Res – каталог для ресурсов.

Программа, созданная на Visual C++ AppWizard, состоит из четырех основных частей:

  1. объекта приложения;
  2. объекта главного окна;
  3. объекта документа;
  4. объекта вида.

Объект приложения, находящийся в файлах New.h (содержит определения констант, объявления переменных и методов класса) и New.срр, - это то, что Windows запускает при старте программы. Когда этот объект начинает работу, он запускает программу, создает и размещает на экране главное окно и организовывает передачу сообщений Windows в главное окно и из него. Сообщения – это сигналы, с помощью которых разные объекты в среде Windows общаются между собой. Например, когда пользователь завершает работу программы, Windows посылает объекту приложения сообщение WM_QUIT. Если пользователь изменяет размеры окна – сообщение WM_SIZE. Большинство полученных сообщений объект приложение отсылает объекту главного окна.

Объект главного окна отображает на экране саму программу. В нем находится меню, заголовок окна, панель инструментов и строка состояния. Причем меню и заголовок окна создаются автоматически, а панель инструментов и строка состояния добавляются в методе Create (хотя основная часть программного кода для них сосредоточена в объекте вида). Здесь пишутся различные методы, предназначенные для обработки конкретных сообщений Windows.

Например, метод OnDraw вызывается при необходимости перерисовать клиентскую область окна. В этом методе можно использовать класс CDC – класс для работы с контекстными устройствами. Графический вывод может выполняться как на экран, так и на принтер. Например метод TextOut позволяет отобразить на поверхности главного окна текстовое сообщение.

Объект вида предназначен для работы с клиентской областью, т.е. рабочей зоной программы. (Объект вида – это окно, которое накладывается поверх клиентской области). Программы для Windows управляются событиями, т.е. реагируют на действия пользователя. Так метод OnDraw вызывается, когда необходимо перерисовать клиентскую область. В этом методе можно вывести текстовое сообщение прямо в объекте вида.

PDC->TextOut(0,0,”Hello”);

Переменная PDC принадлежит классу CDC. Это класс для работы с контекстными устройствами. Графический вывод может выполняться как на экран, так и на принтер. Все рисование будет выполняться через контекст устройств.

Объект документа – хранит данные программы, которые отображаются и в клиентской, и в неклиентской области. Объект вида потом отображает только те данные, которые попадают в клиентскую область. Так для вывода текстового сообщения с помощью текстовой переменной, описание этой переменной следует разместить именно в объекте документа, а точнее в заголовочном файле объекта документа (где расположено объявление класса объекта документа). Инициализация такой переменной может находиться в конструкторе класса документа.

При генерации кода AppWizard автоматически создает указатель на объект документа с помощью метода GetDocument() класса вида.

CExampleDoc* pDoc=GetDocument(); //Example – название рабочей области

ASSERT_VALID(pDoc); // проверка на правильность создания указателя.

 


<== предыдущая лекция | следующая лекция ==>
Условная компиляция | Лекция 13. Тема: Объектно-ориентированное программирование
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 269; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.