Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ЛАБОРАТОРНЫЙ ПРАКТИКУМ

ПО MFC

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАМЫШИНСКИЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ (ФИЛИАЛ)

ВОЛГОГРАДСКОГО ГОСУДАРСТВЕННОГО ТЕХНИЧЕСКОГО УНИВЕРСИТЕТА

,

ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО MFC

Учебное пособие

РПК «Политехник»

Волгоград

2007

УДК 00

П 75

Рецензенты: коллектив кафедры «Информатика и вычислительная техника» Волгоградского государственного архитектурно-строительного университета; преподаватель высшей категории ФГОУ СПО «Камышинский технический колледж»

, ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО MFC: Учеб. пособие / ВолгГТУ, Волгоград, 2007. – 80 с.

ISBN -9

Рассматривается библиотека классов MFC. Излагаются задачи создания программного кода пользовательского интерфейса от окна приложения до диалоговых окон.

Предназначено для студентов специальности 2202 «Автоматизированные системы обработки информации и управления (по отраслям)» (код ОКСО 230103.51) очной и очно-заочной форм обучения.

Ил. 17. Табл. 12. Библиогр.: 3 назв.

Печатается по решению редакционно-издательского совета

Волгоградского государственного технического университета

ISBN -9 © Волгоградский

государственный

технический

университет, 2007

Введение

Одна из главных целей операционной системы Microsoft Windows – дать человеку, который хотя бы немного знаком с системой, возможность сесть за компьютер и запустить любое приложение без предварительной подготовки (изучения интерфейса, команд и т. п.). Для этого Windows предоставляет дружественный интерфейс пользователя, такой, чтобы пользователь думал над тем, что программа делает, а не над тем, как ею пользоваться. Ведь, фактически, значительная часть кода Windows-приложения предназначена именно для организации интерфейса с пользователем (но не самая важная в приложении).

НЕ нашли? Не то? Что вы ищете?

Хотя создание удобного интерфейса «под Windows» является постоянной задачей при написании любой Windows-программы, такой интерфейс не создается автоматически.

Объем исходного кода операционной системы Microsoft Windows, начиная с версии Windows 95, составляет более миллиона строк. Часть его программисты-разработчики оформили в виде функций интерфейса прикладной программы Win32 API, некоторые из которых вошли в состав библиотеки MFC. Эти функции программисты могут использовать в своих программах для создания интерфейса.

В цикле лабораторных работ Вы познакомитесь с некоторыми классами библиотеки MFC, которые позволят Вам создавать интерфейс пользователя в программах. Кроме того, в ходе изучения лабораторных работ Вы постепенно освоите основные приемы, необходимые для создания приложений под Windows. Полученные знания позволят Вам самостоятельно совершенствоваться и изучать другие библиотеки классов.

1. Основы программирования под Windows

1.1. Что такое MFC?

Функций API в операционной системе Microsoft Windows довольно много, и чтобы прикладному программисту было легче с ними работать, они были сгруппированы в классы, которые составляют библиотеку MFC.

MFC (Microsoft Foundation Classes) – это базовый набор классов (библиотека), написанных на языке C++ и предназначенных для упрощения и ускорения процесса программирования под Windows.

В библиотеку входит более 200 классов. Они дают возможность создавать Windows-приложения на базе объектно-ориентированного подхода.

Одним из основных преимуществ работы с MFC является возможность многократного использования одного и того же кода. Так как библиотека содержит много элементов, общих для всех Windows-приложе-ний, нет необходимости каждый раз писать их заново. Вместо этого их можно просто наследовать. Кроме того, интерфейс, обеспечиваемый библиотекой, практически независим от конкретных деталей, его реализующих.

Небольшое число классов, определенных в библиотеке, не связано непосредственно с программированием под Windows. Это, в частности, классы, предназначенные для создания строк управления файлами и обработки особых ситуаций. Иногда называемые классами общего назначения, они могут использоваться как Windows-, так и нe Windows-прило-жениями.

В операционной системе Windows реализован интерфейс вызова функций. Благодаря данному интерфейсу, доступ к системным ресурсам операционной системы осуществляется через целый ряд системных функций. Совокупность функций называется прикладным программным интерфейсом, или API (Application Programming Interface). Этот механизм достаточно удобен: так, программисту не надо каждый раз заново писать программный код для прорисовки меню, кнопок, панелей инструментов, окон и т. п. Он может воспользоваться уже готовыми и встроенными в операционную систему Windows элементами интерфейса и функциями обработки действий пользователя.

Поскольку API состоит из большого числа функций, может сложиться впечатление, что при компиляции каждой программы, написанной для Windows, к ней подключается код довольно значительного объема. В действительности это не так. Функции API содержатся в библиотеках динамической загрузки (Dynamic Link Libraries, или DLL), которые загружаются в память только в тот момент, когда к ним происходит обращение, т. е. при выполнении программы. Хотя возможно скомпилировать программу и с использованием статических библиотек, но тогда ее объем значительно возрастет.

1.2. Многозадачность в Windows

Как известно, все версии операционной системы Windows поддерживают многозадачность. Начиная с версии Windows 95/NT, поддерживаются два типа многозадачности: основанный на процессах и основанный на потоках. Поскольку это очень важный момент, рассмотрим его подробнее.

Процесс это программа, которая выполняется. При многозадачности такого типа две или более программы могут выполняться параллельно. Конечно, они по очереди используют ресурсы центрального процессора и, с технической точки зрения, выполняются не одновременно. Но благодаря высокой скорости работы компьютера это практически незаметно. Если в компьютере имеются два центральных процессора или два ядра в одном процессоре, то выполнение программ вообще может происходить независимо.

Поток – это отдельная часть исполняемого кода. Название произошло от понятия «направление протекания процесса». В многозадачности данного типа отдельные потоки внутри одного процесса также могут выполняться одновременно. Все процессы имеют, по крайней мере, один поток, но их может быть несколько.

Отсюда можно сделать вывод, что в Windows допускается существование процессов, состоящих из двух или нескольких частей, причем части и процессы могут выполняться одновременно. Оказывается, такое предположение верно. Следовательно, при работе возможно параллельное выполнение как программ, так и отдельных частей самих программ.

В Windows используется приоритетная многозадачность. Каждому активному потоку предоставляется определенный промежуток времени работы процессора. По истечении данного промежутка управление автоматически передается следующему потоку. Это не дает возможность программам полностью захватывать ресурсы процессора.

1.3. Взаимодействие программ и Windows

Windows и программы взаимодействуют следующим образом: программа ожидает получения сообщения от Windows. Когда это происходит, то выполняется некоторое действие. После его завершения программа ожидает следующего сообщения. Важно понимать, что на действия пользователя или других программ прежде всего реагирует операционная система, а затем она может послать сообщение Вашей программе. Ваша программа может обработать это сообщение или проигнорировать. Напрямую взаимодействия программы с пользователем или другими программами, минуя посредничество Windows, обычно не происходит. Операционная система реагирует на все внешние воздействия и посылает сообщения всем программам, а будет ли программа реагировать на эти сообщения, зависит от программиста.

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

1.4. Основы программирования под Windows

Поскольку архитектура Windows-программ основана на принципе сообщений, все эти программы содержат некоторые общие компоненты. Обычно их приходится в явном виде включать в исходный код. Но, к счастью, при использовании библиотеки MFC это происходит автоматически; нет необходимости тратить время и усилия на их написание. Тем не менее, чтобы до конца разобраться, как работает Windows-программа, написанная с использованием MFC, и почему она работает именно так, необходимо в общих чертах понять назначение этих компонентов. Кроме того, на них ссылаются практически во всех книгах, посвященных программированию под Windows.

Все Windows-программы должны содержать специальную функцию, которая не используется в самой программе, но вызывается операционной системой. Эту функцию обычно называют функцией окна или процедурой окна. Она вызывается Windows, когда системе необходимо передать сообщение в программу. Именно через нее осуществляется взаимодействие между программой и системой. Функция окна передает сообщение в своих аргументах. Согласно терминологии Windows, функции, вызываемые системой, называются функциями обратного вызова. Таким образом, функция окна является функцией обратного вызова.

Как объяснялось выше, Windows взаимодействует с программой, посылая ей сообщения. Все приложения Windows должны организовывать так называемый цикл сообщений. В этом цикле каждое необработанное сообщение должно быть извлечено из очереди сообщений данного приложения и передано назад в Windows, которая затем вызывает функцию окна программы с данным сообщением в качестве аргумента.

Как будет показано дальше, каждое окно в Windows-приложении характеризуется определенными атрибутами, называемыми классом окна. В традиционной программе класс окна должен быть определен и зарегистрирован прежде, чем будет создано окно. При регистрации необходимо сообщить Windows, какой вид должно иметь окно и какую функцию оно выполняет. В то же время регистрация класса окна еще не означает создания самого окна. Для этого требуется выполнить дополнительные действия.

1.5. Типы данных в Windows

Как Вы вскоре убедитесь, в Windows-программах вообще (и в использующих библиотеку MFC в частности) не слишком широко применяются стандартные типы данных из С или C++, такие как int или char*. Вместо них используются типы данных, определенные в различных библиотечных (заголовочных) файлах. Наиболее часто используемыми типами являются HANDLE, HWND, BYTE, WORD, DWORD, UINT, LONG BOOL, LPSTR и LPCSTR. Тип HANDLE обозначает 32-разрядное целое число, используемое в качестве дескриптора. Есть несколько похожих типов данных, но все они имеют ту же длину, что и HANDLE, и начинаются с литеры Н.

Дескриптор это число, определяющее некоторый ресурс (важнее не само число, а ресурс, который определяется дескриптором). Дескриптор является уникальным числом и однозначно указывает на ресурс.

Дескрипторы необходимы, чтобы Windows могла обратиться к любому ресурсу, элементу интерфейса. Понятно, что эти числа не должны повторяться. Например, тип HWND обозначает 32-разрядное целое – дескриптор окна.

Тип BYTE обозначает 8-разрядное беззнаковое символьное значение, тип WORD – 16-разрядное беззнаковое короткое целое, тип DWORD – беззнаковое длинное целое, тип UINT – беззнаковое 32-разрядное целое. Тип LONG эквивалентен типу long. Тип BOOL обозначает целое и используется, когда значение может быть либо истинным, либо ложным (значения True и False). Тип LPSTR определяет указатель на строку, а LPCSTR – константный (const) указатель на строку.

1.6. Соглашение об использовании имен

Программный код библиотеки MFC написан с соблюдением соглашения об использовании имен, принятом фирмой «Microsoft». Например, имя функции должно начинаться с глагола, за которым следует существительное. Первые символы глагола и существительного должны быть написаны с заглавной буквы. В большинстве случаев имена функций в лабораторных работах соответствуют данному правилу.

Для имен переменных «Microsoft» решила применять довольно сложную систему включения ссылки на используемый тип данных. С этой целью в начало имени переменной добавляется префикс, который соответствует определенному типу данных и записывается строчными буквами. Само имя начинается с заглавной буквы. Префиксы типов приведены в табл. 1. Откровенно говоря, использование этих префиксов считается спорным и не всегда соблюдается. Многие программисты придерживаются этого правила, а многие нет. В лабораторных работах префиксы используются только тогда, когда это кажется достаточно разумным. Вы можете поступать так, как привыкли (до соответствующего материала и указаний преподавателя).

Таблица 1

Символы префиксов типов переменных

Префикс

Тип данных

b

булевый (один байт; Boolean)

c

символ (один байт; Char)

C

класс (Class)

dw

длинное беззнаковое целое (Double Word)

f

16-разрядное битовое поле (флаги; Flags)

fn

функция (Function)

h

дескриптор (Handle)

l

длинное целое (Long)

lp

длинный указатель (Long Pointer)

n

короткое целое (Short Int)

p

указатель (Pointer)

pt

длинное целое, хранящее экранные координаты (Point)

w

короткое беззнаковое целое (Word)

sz

указатель на строку, завершающуюся символом «\0» (String by Zero)

lpsz

длинный указатель на строку, завершающуюся символом «\0» (Long Pointer String by Zero)

rgb

длинное целое, хранящее значение цвета в формате RGB (Red, Green, Blue)

1.7. Иерархия классов MFC

Структура иерархии классов MFC довольно большая. В ее вершине находится класс CObject. Он содержит различные функции, используемые во время выполнения программы и предназначенные, в частности, для предоставления информации о текущем типе данных. Класс CObject является предком большинства других классов MFC, его свойства наследуются во всех порожденных классах.

Некоторые классы порождаются непосредственно от CObject. Наиболее широко используемыми среди них являются CCmdTarget, CFile, CDC, CGdiObject, CException и CMenu. Класс CCmdTarget предназначен для обработки сообщений. Если помните, в первой главе говорилось о том, что Windows взаимодействует с программой через механизм сообщений, который и реализован в CCmdTarget. Класс CFile предназначен для работы с файлами, в частности с файлами на диске. Класс CDC обеспечивает поддержку контекстной связи с устройством (под устройством здесь понимается преимущественно экран). Класс CException предназначен для обработки особых ситуаций, а CMenu – для создания меню. Помимо вышеперечисленных, есть еще несколько классов, порождаемых непосредственно от CObject и предназначенных для синхронизации потоков, а также для работы с базами данных, массивами, списками и преобразователями типов.

От класса CCmdTarget порождается очень важный класс: CWnd. Он является базовым для создания всех типов окон, а также различных элементов управления окна. Наиболее широко используемым классом, порождаемым от CWnd, является CFrameWnd. Он обеспечивает поддержку так называемых SDI-окон (SDISingle Document Interface – одно-документный интерфейс). В классах, порождаемых от CFrameWnd, будет инициализироваться очередь сообщений программы.

Другим классом, порождаемым от CCmdTarget, является CWinThread. С его помощью создается поток выполнения приложения и поддерживается механизм потоковой многозадачности.

От CWinThread порождается, наверное, единственный из наиболее важных классов, обращение к которому в MFC-программах происходит напрямую: CWinApp. Хотя он расположен лишь на четвертом уровне иерархии в MFC, тем не менее, он является одним из фундаментальных классов, поскольку предназначен для создания самого приложения. В частности, он позволяет управлять загрузкой, инициализацией, выполнением и завершением приложения. В каждой программе имеется один (и только один) объект класса CWinApp. Как только он будет создан, приложение начнет выполняться.

1.8. Глобальные функции и функции-члены в MFC

Большинство функций, вызываемых в MFC-программе, являются членами одного из классов, определенных в библиотеке. Вот несколько примеров:

-  функция, позволяющая отобразить окно, называется ShowWindow и является членом класса CWnd;

-  для вывода текстовой строки в окно используется функция TextOut – член класса CDC.

Большинство функций API доступны через функции-члены MFC. Именно по этой причине последние используются так часто. Всегда можно обратиться непосредственно к самим API-функциям.

В библиотеке есть и ряд глобальных функций, которые также можно свободно использовать. Все они начинаются с префикса afх. Например, одной из наиболее широко используемых функций является AfxMessageBox. Далее в лабораторных работах будет показано, как с ее помощью отобразить на экране окно сообщения. Поскольку этот тип окон является заранее определенным, такое окно можно отображать независимо от других окон приложения.

1.9. Файл AFXWIN. H

Все MFC-программы должны включать файл AFXWIN. H. В нем (а также в различных вспомогательных файлах) содержатся описания классов библиотеки MFC. Он автоматически подключает большинство других библиотечных файлов, относящихся к MFC, в том числе файл WINDOWS. H. Включая файл AFXWIN. H в свою программу, Вы тем самым подготавливаете все необходимое для создания Windows-приложения.

1.10. Контрольные вопросы

1.  Что такое MFC?

2.  Какой файл обязательно необходимо подключать в MFC-программы?

3.  Что такое дескриптор?

4.  Как взаимодействует Windows и программа?

5.  Что такое очередь сообщений?

6.  Что такое сообщение?

7.  С помощью какого механизма взаимодействуют Windows и приложения?

8.  Что такое цикл сообщений?

9.  Какие виды многозадачности есть в Windows?

10.  Что такое процесс?

11.  Что такое поток?

12.  Перечислите наиболее важные классы в MFC?

13.  За что отвечает класс CWnd?

14.  Для чего предназначен класс CWinApp?

15.  Приведите пример глобальной функции и функции-члена в MFC?

16.  Какой класс стоит в вершине иерархии классов MFC?

17.  Какой заголовочный файл должны включать все программы на MFC?

2. Лабораторная работа № 1.

Создание простых приложений Windows

Время выполнения лабораторной работы – 4 часа.

Цель работы – изучить каркас простых приложений Windows.

Оборудование и программное обеспечение, необходимое для выполнения лабораторной работы: компьютер с процессором не хуже Pentium II с тактовой частотой 266 МГц, оперативной памятью не менее 64 Мб, с операционной системой Microsoft Windows 98/NT/2000/XP, средой программирования Microsoft Visual C++ 6.0.

2.1. Каркас MFC-программы

В данной лабораторной работе мы напишем простую программу, которая послужит основой для написания всех остальных программ в других лабораторных работах.

В простейшем случае программа, написанная с использованием MFC, содержит два класса, порождаемые от классов иерархии библиотеки: класс, предназначенный для создания приложения, и класс, предназначенный для создания окна. Другими словами, для создания минимальной программы необходимо породить один класс, определяющий непосредственно приложение, и второй класс, определяющий главное окно приложения. Первый порождается от CWinApp, второй от CFrameWnd. Хотя в программе могут при необходимости наследоваться любые классы, но эти два обязательны для любой программы.

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

Для создания MFC-программы необходимо выполнить следующие действия:

1.  От CWinApp породить класс, определяющий приложение.

2.  От CFrameWnd породить класс, определяющий окно.

3.  Создать очередь сообщений.

4.  Переопределить функцию InitInstance класса CWinApp.

5.  Создать экземпляр класса, определяющего приложение.

Прежде чем продолжить чтение, протестируйте пример программы, приведенной в листинге № 1. В нем создается стандартное окно, содержащее заголовок, системное меню, а также кнопки минимизации, максимизации и закрытия.

Результат выполнения программы показан на рис. 1.

Листинг № 1. Минимальная MFC-программа

// Минимальная MFC-программа

#include <afxwin. h>

// Порождение основных классов

// Это класс, предназначенный для создания главного окна

class CMainWin:public CFrameWnd

{

public:

CMainWin(); // Конструктор класса

DECLARE_MESSAGE_MAP() // Макрос, определяющий очередь

// сообщений

};

// Определение конструктора класса CMainWin

CMainWin::CMainWin()

{

// Создание окна

Create(NULL, "Скелет MFC-приложения");

};

// Это класс, предназначенный для создания приложения

class CApp:public CWinApp

{

public:

BOOL InitInstance(); // Функция инициализации приложения

};

// Инициализация приложения

BOOL CApp::InitInstance()

{

// Объявление указателя и создание экземпляра CMainWin через указатель

m_pMainWnd = new CMainWin;

// Отображение окна

m_pMainWnd -> ShowWindow(m_nCmdShow);

// Обновление окна

m_pMainWnd -> UpdateWindow();

// Возврат успешного завершения инициализации приложения

return TRUE;

};

// Это пустая очередь сообщений приложения

// Не обрабатывается ни одного сообщения

BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd)

END_MESSAGE_MAP()

CApp App; // создание экземпляра приложения

Конец листинга № 1

Рис. 1. Результат работы программы, приведенной в листинге № 1

Работает данная простейшая программа следующим образом:

-  создается экземпляр класса CApp (самая последняя строка в листинге № 1), для чего вызывается конструктор этого класса, но так как он не описан, то выполняется конструктор родительского класса CWinApp;

-  в конструкторе родительского класса вызывается функция инициализации приложения InitInstance, которая переопределена в классе CApp;

-  в функции инициализации приложения создается экземпляр класса CMainWin, являющийся дочерним от класса CFrameWnd, для чего вызывается конструктор класса CMainWin;

-  в конструкторе класса CMainWin создается окно с помощью функции Create;

-  далее в функции инициализации InitInstance приложения окно отображается на экране функцией ShowWindow и обновляется его содержимое функцией UpdateWindow;

-  функция инициализации возвращает значение TRUE в конструктор класса CWinApp.

Как видите, почти весь код в примере предназначен для порождения двух классов от базовых классов, определенных в MFC – CFrameWnd и CWinApp. Первый класс предназначен для создания главного окна приложения, а второй – для создания самого приложения. Приложение начинает выполняться, когда создается экземпляр класса второго типа.

Для создания стандартного окна в приложении должен наследоваться класс от класса CFrameWnd. В примере порождаемый класс называется CMainWin. Он содержит два члена: конструктор CMainWin и макрос DECLARE_MESSAGE_MAP. В макросе объявляется очередь сообщений для класса CMainWin, что позволяет организовать обработку сообщений. Для любого окна, в котором обрабатываются сообщения, необходимо применять этот макрос. Кроме того, он должен быть последним членом, объявляемым в классе (в противном случае следующий член должен быть объявлен с помощью оператора доступа – «::»).

Само окно создастся в конструкторе CMainWin с помощью вызова функции-члена Create. Класс CFrameWnd является потомком класса CWnd, который, в свою очередь, порождается от CCmdTarget, а тот – от CObject. Это означает, что любой класс, порождаемый от CFrameWnd, имеет доступ ко всем функциям-членам и переменным, объявленным в пределах этой иерархии. Функция Create используется почти во всех приложениях. Она предназначена для создания окна и является членом класса CFrameWnd. Если быть абсолютно точным, то объект «окно» создается конструктором CMainWin, но этот объект не является видимым окном, функция Create создает как раз видимый объект.

Класс САрр, предназначенный для создания приложения, порождается от CWinApp. Он является потомком класса CWinThread, который, в свою очередь, порождается от CCmdTarget. CWinApp содержит ряд переменных и функций-членов, из которых только одна, InitInstance, используется в программе. Ее прототип таков:

virtual BOOL CWinApp::InitInstance();

InitInstance – это виртуальная функция, которая должна переопределяться в классе, ответственном за создание приложения. Она вызывается каждый раз при запуске программы. Внутри InitInstance выполняются все действия, связанные с инициализацией приложения. Функция должна возвращать ненулевое значение при успешном завершении и ноль в противном случае (в листинге № 1 всегда возвращается значение TRUE, хотя возможна ситуация аварийного завершения).

Внутри InitInstance в листинге № 1 содержатся три команды. Сначала создается объект типа CMainWin и указатель на него запоминается в переменной m_pMainWnd. Эта переменная является членом класса CWinThread, неявно наследуемым в САрр. Она имеет тип CWnd* и используется почти во всех MFC-программах, потому что содержит указатель на объект главного окна программы. Через нее будут вызываться различные функции-члены, связанные с главным окном, как это показано в следующих двух строках примера.

Когда главное окно создано, через m_pMainWnd вызываются две функции, являющиеся членами класса CWnd. Первая из них называется ShowWindow. Ее прототип выглядит следующим образом:

BOOL CWnd::ShowWindow(int How);

Функция ShowWindow определяет, каким образом будет отображено на экране главное окно приложения. Режим отображения задается параметром How. При первом вызове в качестве параметра необходимо передать переменную m_nCmdShow. Она является членом класса CWinApp и определяет, как будет выглядеть главное окно при запуске приложения. При последующих вызовах функции можно задать другие режимы либо закрыть окно. Некоторые значения, которые может принимать параметр How, приведены в табл. 2.

Функция ShowWindow возвращает признак предыдущего состояния окна. Если оно было на экране, то результат ненулевой, в противном случае значением функции будет ноль.

Следующая функция, вызываемая в InitInstance, называется UpdateWindow. Она также является членом класса CWnd. Хотя, с технической точки зрения, для такой простой программы нет необходимости в вызове этой функции, вызов все же присутствует, потому что данная функция используется в большинстве приложений Windows. Фактически, она указывает Windows на необходимость послать программе сообщение о том, что содержимое главного окна нужно обновить (это сообщение будет рассмотрено далее).

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7