КАТЕГОРИИ: Архитектура-(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, состоит из четырех основных частей:
Объект приложения, находящийся в файлах 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); // проверка на правильность создания указателя.
Дата добавления: 2014-01-06; Просмотров: 269; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |