
- •Составление таблицы истинности.
- •Основы алгебры логики.
- •Логические операции с высказываниями: конъюнкция, дизъюнкция, инверсия.
- •Законы логических операций. Таблицы истинности.
- •9.Понятие системы программирования.
- •10. Эволюция языков прогаммирования.
- •11. Элементы языков программирования.
- •12.Исходный, объектный и загрузочный модули.
- •13.Интегрированная среда программирования.
- •14. Методы программирования
- •15. Сущность методов программирования.
- •16. Методы программирования: структурный, модульный, объектно-ориентированный. Достоинства и недостатки методов программирования.
- •17.Общие принципы разработки программного обеспечения. Жизненный цикл программного обеспечения.
- •18. Типы приложений. Консольные приложения.
- •19. Типы приложений. Оконные Windows приложения.
- •20. Типы приложений. Web-приложения
- •21.Типы приложений. Библиотеки.
- •22.Типы приложений. Web-сервисы.
- •23.Константа — это составная часть программы; объект, имеющий значение,неизменная величина.
- •25.К простым типам данных относятся: порядковые и вещественные типы.
- •Int(X) Real, integer Real Целая часть числа
- •27.Структура программы на языке Турбо Паскаль
- •Var………..; {раздел объявления переменных}{±}
- •28.Оператор – инструкция, задающая определенные действия программы. Одним из операторов является оператор присваивания, который присваивает значение некоторого выражения некоторой переменной.
- •29.Оператор присваивания имеет следующую структуру:
- •31.Составной оператор
- •32.Синтаксис оператора if:
- •35.Строковый тип данных.
- •37.Объединение разнородных элементов (Запись)
- •39.Типы файлов Турбо Паскаль
- •41.Доступ к файлу в программе происходит с помощью переменных файлового типа. Переменную файлового типа описывают одним из трех способов:
- •42.Работа с типизированными файлами
- •43.Стандартные процедуры и функции
- •45. Процедуры и функции обработки текстовых файлов.
- •46 Процедуры и функции
- •47 Структура процедуры, описание процедур
- •48 Передача параметров, вызов процедуры
- •49 Локальные и глобальные данные
- •50 Структура функции, описание функции
- •51 Передача параметров, вызов функции
- •52 Модули
- •53 Интерфейсная часть модуля
- •54 Инициирующая часть модуля
- •55 Исполняемая часть модуля
- •56 Обращение к модулю из основной программы
- •57 Объекты
- •58 Основные принципы ооп
- •59 Описание объектов, иерархия объектов
- •60 Наследование записей
- •61 Понятие метода, определение метода, область действия метода
- •62 Стандартные библиотечные модули
- •63 Назначение модуля Dos
- •64 Назначение crt модуля
- •65 Структурное программирование
- •66 Алгоритм
- •67) Способы изображения алгоритмов.
- •68) Элементарные базовые управляющие структуры: линейная последовательность, ветвление.
- •69) Базовые структуры организации цикла: циклы со счётчиком и итерационные циклы.
- •70) Языки программирования.
- •I) машинно-зависимые языки.
- •II) машинно-независимые языки
- •71)Машинно-ориентированные языки и их характеристики.
- •74) Объектно-ориентированные языки программирования. Их достоинства и недостатки.
- •75) Используемые символы.
- •76) Константы.
- •77) Идентификаторы.
- •78) Ключевые слова.
- •79) Комментарии.
- •84) Переменные перечисляемого типа.
- •85) Массивы.
- •86) Структуры.
- •87) Объявления.
- •88) Поля битов.
- •89) Переменные с изменяемой структурой.
- •90.Определение объектов и типов:
- •91.Инициализация данных:
- •Операнды и операции:
- •Преобразования при вычислении выражений:
- •Операции отрицания и дополнения:
- •Операции разадресации и адреса:
- •Операция sizeof:
- •Мультипликативные операции:
- •Аддитивные операции:
- •Операции сдвига:
- •Поразрядные операции:
- •101 Наиболее употребимы двоичная, восьмеричная, десятичная и шестнадцатеричная система исчисления.
- •107 В языке си операции с высшими приоритетами вычисляются первыми. Наивысшим приоритетом является приоритет равный 1. Приоритеты и порядок операций приведены в табл. 8.
- •108 При выполнении операций происходят неявные преобразования типов в следующих случаях:
- •109 Любое выражение, которое заканчивается точкой с запятой, является оператором.
- •1.4.2. Пустой оператор
- •111 Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:
- •Вопрос № 112 (Оператор if)
- •Вопрос №113 (Оператор switch)
- •Вопрос №114 (оператор break)
- •Вопрос №115 (оператор for )
- •Вопрос №116 (оператор while)
- •Вопрос № 117 (оператор do while )
- •Вопрос №118 (оператор continue)
- •Вопрос №119 (оператор return)
- •Вопрос №120 (оператор goto)
- •Вопрос №121 (определение и вызов функций)
- •Вопрос № 122 ( вызов функции с переменным числом параметров)
- •Вопрос № 123 (Передача параметров функции main)
- •Вопрос №124 (Исходные файлы и объявление переменных)
- •Вопрос № 125 (Объявления функций)
- •Вопрос № 126 (Время жизни и область видимости программных объектов)
- •Вопрос №127 (Инициализация глобальных и локальных переменных)
- •Вопрос № 128 (Методы доступа к элементам массива)
- •Вопрос № 129 (Указатели на многомерные массивы)
- •Вопрос № 130 (Операции с указателями)
- •Вопрос № 131 (Массивы указателей)
- •Вопрос № 132 (Динамическое размещение массивов)
- •Вопрос №133 (директива #include)
- •134. Директива #define
- •135. Директива #undef
- •136. Методы организации и хранения линейных списков
- •136. Методы организации и хранения линейных списков
- •137. Операции со списками при последовательном хранении
- •138. Операции со списками при связанном хранении
- •5)Частичное упорядочение списка
- •139. Организация двух связанных списков
- •140. Стеки и очереди
- •141. Пузырьковая сортировка
- •142. Сортировка вставкой
- •143. Сортировка посредством вывода
- •144. Слияние списков
- •145. Сортировка списков путем слияния
- •146.Последовательный поиск
- •147. Бинарный поиск
- •148. Методы вычисления адреса
- •150.Типы данных языка программирования
- •154. Типы данных
- •155. Выражения и оперпции
- •178) Поиск, удаление, замена и добавление символов в строке.
- •Int strcmp(const char *, const char *); лексикографическое сравнение строк
- •Int strncmp(const char *, const char *, size_t); лексикографическое сравнение первых n байтов строк
- •Int strcoll(const char *, const char *); лексикографическое сравнение строк с учетом локали collating order
- •180) Операции со строками
- •181) Объявление множества
- •182) Операции над множествами
- •183) Объявление файла
- •184) Файл последовательного доступа
- •185) Давайте сперва перед файлами произвольного доступа разберем режимы открытия:
- •187,188,189)Операции файла последовательного доступа. ( Открытие и закрытие и т.Д)
- •191) Объектно-ориентированное программирование
- •192) Основные принципы ооп.
- •193) История ооп
- •194)Базовые понятия ооп
- •195)Основные принципы ооп (Инкапсуляция, Наследие, Полиморфизм).
- •196) Событийно управляемое программирование
- •197) Компонентно-ориентированный подход
- •198) Классы объектов. Компоненты и их свойства.
- •199) Требования к аппаратным и программным средствам интегрированной среды разработки разработчика.
- •200)Интерфейс среды разработчика.
- •201. Чтобы использовать в проекте уже созданные ole-элементы управления, необходимо понимать, как создать проект, допускающий встраивание ocx-объектов, и как добавить в проект эти элементы.
- •202. Для добавления элементов к панели, созданную в предыдущей процедуре, перетащите элементы управления из раздела Редактор ленты на панели Панель элементов в представлении конструирования.
- •211. Виды классов:
- •215. Основными механизмами в объекто ориентированном программирование является полиморфизм, наследование и инкапсуляция.
- •220. Компиляция и запуск приложения
- •221. Создание оконных приложений в Visual Studio
- •222. У всех Windows-приложений фиксированная структура, определяемая функцией WinMain. Структура приложения, построенного из объектов классов библиотеки mfc, является еще более определенной.
- •223. При разработке программы использовались перечисленные ниже объекты и их методы.
215. Основными механизмами в объекто ориентированном программирование является полиморфизм, наследование и инкапсуляция.
Полиморфизм и множественное наследование
Struct B
{virtual void b();
};
Struct B2
{ virtual void b2();
Struct Dipubblic b, public B2
{ void b();
Void b2();
};
Void Diib2()
{// в этом месте this указывает на D
}
Dd;
B2*pd2=&-d; - здесь происходит автоматическое приведение вверх по решетки наследования к непервой базе к значению адреса Д добавилось смещение
//в другом файле
Pb->b2(); - компилятор не знает что pb2 на самом деле указывает на b2-часть в D. В данном случае указатель this –D*, а не В2*. Приведение требует вычитания которое приводит В2 к D, а потом вызывает D к В2, и находит адрес в виртуальной таблицы.
Правила перегрузки
Функции должны отмечаться количеством или хотя бы типом аргументов, при чем типы должны отличаться принципиально. Количество аргументов, их типы, и константность функции (если это функция член) называется сигнатурой функции. При перегрузки, все сигнатуры, должны быть разными. На сигнатуру, а следовательно на перегрузку не влияет тип возвращаемого значения.
С модулируемый приветствие двух объектов, вы и компьютер, вы здороваетесь с компьютером на ваши первые приветствия компьютер, не отвечает, на конец после 3 попытки он советует никогда не разговаривать с неизвестными и предлагает представиться. После вашего представления компьютер любезно здоровается с вами. В соответствие со сценарием проектируем диалоговое окно, которое пользователь увидит при запуске приложения. Две командные кнопки вы и компьютер это – объекты участники диалога, объекты имеют соответствующие окна редактирования, где будет появляться текст диалога. Пользователь инициирует диалог щелчком той или иной командной кнопки. Программа реагируя на события вызванные действиями пользователя выдает соответствующие реплики в окне редактирования на определенной этапе диалога пользователь сможет ввести своё имя в окно редактирования.
216. Благодаря данному интерфейсу доступ к системным ресурсам осуществляется через целый рад системных функций. Совокупность таких функций называется прикладным программным интерфейсом, или API (Application Programming Interfase). Для взаимодействия с Windows приложение запрашивает функции API, с помощью которых реализуются все необходимые системные действия, такие как выделение памяти, вывод на экран, создание окон и т.п.
Библиотека MFC инкапсулирует многие функции API. Хотя программам и разрешено обращаться к ним напрямую, все же чаще это будет выполняться через соответствующие функции-члены. Как правило, функции-члены либо аналогичны функциям API, либо непосредственно обращаются к нужной части интерфейса.
217. Существует несколько способов написания программ с графическим интерфейсом с помощью Visual C++. Во-первых – на языке С или С++ с непосредственным обращением к основным функциям Win32 API, которые являются частью операционных систем Windows. При таком подходе требуется написать множество строк программного кода, прежде чем перейти к решению целевой задачи разрабатываемого приложения.
Во-вторых – с помощью библиотеки MFC, содержащей большой набор готовых классов и вспомогательный код для выполнения стандартных задач программирования в среде Windows (например, создания окон и обработки сообщений). Кроме того, MFC используется для быстрого добавления в программы панелей инструментов, многопанельных окон поддержки OLE. Применяется для создания элементов, которые используются программными компонентами и отображаются в Web-браузерах и других приложениях. Использование MFC позволяет упростить программы с графическим интерфейсом, что значительно облегчит процесс программирования. Отметим: функции MFC содержат вызовы функций Win32 API. Говорят, что Win32 API «упакован» в библиотеку MFC, представляющую более высокоуровневые и переносимые средства программного интерфейса. Кроме того, в MFC-программах можно свободно вызывать функции Win32 API, сохраняя возможность использования этого интерфейса.
В-третьих – на языке С++ с использованием библиотеки MFC и различных мастеров. Мастер AppWizard используется для генерации основы исходных файлов программ. Аналогично, мастер AppWizard генерирует основную часть кода для определения производных классов и обработчиков сообщений, настройки библиотеки MFC, управления диалоговыми окнами, а также выполнения других задач. Заметьте: возможности мастеров не ограничиваются генерацией простых оболочек программ. Они позволяют создавать программы с большим набором сложных компонентов. К таковым относятся панели инструментов, строки состояния, контекстная справка, объекты OLE, средства доступа к базам данных и даже законченные меню с частично или полностью функционирующими командами открытия и сохранения файлов, печати, предварительного просмотра печати и выполнения других задач. После генерации основного кода программы с помощью мастера добавьте собственный код, определяющий логику работы программы
Преимущество третьего подхода состоит в использовании не только уже написанного кода MFC, но и сгенерированного исходного кода, позволяющего решить многие рутинные задачи программирования. Библиотека MFC и матера освобождают нас от необходимости создавать средства визуального интерфейса вручную и обеспечивают соответствие этого интерфейса требованиям MicroSoft.
218. Все Windows-программы должны содержать специальную функцию, которая не используется в самой программе, но вызывается самой операционной системой. Эту функцию обычно называют функцией окна, или процедурой окна. Она вызывается Windows, когда системе необходимо передать сообщение в программу. Именно через нее осуществляется взаимодействие между программой и системой. Функция окна передает сообщение в своих аргументах. Согласно терминологии Windows, функции, вызываемые системой, называются функциями обратного вызова. Таким образом, функция окна является функцией обратного вызова.
Помимо принятия сообщения от Windows, функция окна должна вызывать выполнение действия, указанного в сообщении. Конечно, программа не обязана отвечать на все сообщения, посылаемые Windows. Поскольку их могут быть сотни, то большинство сообщений обычно обрабатывается самой системой, а программе достаточно поручить Windows выполнить действия, предусмотренные по умолчанию.
В большинстве Windows-программ задача создания функции окна лежит на программисте. При использовании библиотеки MFC такая функция создается автоматически. В этом заключается одно из преимуществ библиотеки. Но в любом случае, если сообщение получено, то программа должна выполнить некоторое действие. Хотя она может вызывать для этого одну или несколько API-функций, само действие было инициировано Windows. Поэтому именно способ взаимодействия с операционной системой через сообщения диктует общий принцип построения всех программ для Windows, написанных как с использованием MFC, так и без нее.
219. Вам еще не надоело создавать консольные приложения? Я так и знал: Ну что ж, тогда я не зря старался при написании данного материала, который обязан пролить свет на программирование в среде Windows, и научить вас создавать полноценные оконные приложения, в зависть вашему соседу, который еще этого не умеет. Система, основанная на сообщениях Windows можно назвать объектно-ориентированной системой, хотя формально она таковой не является. Представьте себе систему в виде набора объектов, основным из которых является окно. В процессе работы, Windows "общается" с каждым объектом посредством системных сообщений. При возникновении определенных событий, Windows сообщает об этом окну приложения, посылая ему соответствующее сообщение. Окно, после получения сообщения, должно обработать его и возвратить результат обратно в систему. Как программа узнает о том, что ее окну послано сообщение? Ответ напрашивается сам. На протяжении всей работы программы необходимо проверять, имеются ли в очереди сообщения. Делается это, конечно-же, с помощью цикла, который выполняется в течении всей работы программы. При каждом проходе цикла проверяется наличие сообщений в очереди, и если таковые имеются, тогда программа поочередно получает их и обрабатывает. Win32 API Win32 API (Application Programming Interface - интерфейс прикладного программирования) - это набор функций, позволяющих программисту создавать приложения для Windows. Win32 API является основой для каждой Windows-программы. Программисты, пишущие на С++ уже привыкли, что точкой входа в программу является функция main(). Но в системе Windows это не так. Все Win32-приложения используют в качестве точки входа в программу функцию WinMain. Ее объявление можно найти в заголовочном файле winbase.h: int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ); Давайте рассмотрим все ее аргументы: hInstance - идентификатор экземпляра приложения. hPrevInstance - идентификатор предыдущего экземпляра приложения. В Win32 он всегда равен нулю. lpCmdLine - указатель на командную строку. nShowCmd - флаги для окна. Как видите - все не так сложно! Вас, наверное, удивили только какие-то непонятные типы данных. Не волнуйтесь - разберемся. Типы данных в Windows При первом взгляде на исходный код Windows-приложения, начинающих программистов начинают пугать "странные" типы данных, используемые в программе. Но это только на первый взгляд. На самом, деле разобраться в них вам не составит особого труда. Основные типы данных Win32 API приведены в таблице 1. Таблица 1 BOOL, BOOLEAN Булев. Имеет только 2 значения: TRUE или FALSE CHAR 8-битный символ (ANSI Windows) WCHAR 16-битный символ (Unicode) TCHAR CHAR или WCHAR (если используется Unicode) USHORT, WORD Целое беззнаковое 16-битное число DWORD, DWORD32, UINT32 Целое беззнаковое 32-битное число DWORD64, UINT64, ULONGLONG Целое беззнаковое 64-битное число FLOAT Число с плавающей точкой SHORT Целое знаковое 16-битное число INT, INT32, LONG, LONG32 Целое знаковое 32-битное число INT64, LONG64, LONGLONG Целое знаковое 64-битное число VOID Пустой тип Структура Windows-программ Каждая Windows-программа состоит как минимум из двух основных функций. Это WinMain и функция окна. Давайте напишем простую программу, создающую пустое окно. Для этого в Visual C++ создайте пустой проект Win32 Application, добавьте новый файл (например, myprog.cpp), и вставьте туда следующий код: // Включаем необходимый заголовочный файл для Windows-программ #include <windows.h> // Объявление функции окна (оконной процедуры) LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); HINSTANCE hInst; // Идентификатор приложения // Указатель на константную строку символов - имя программы и класса окна LPCSTR AppName = "MyProgramm"; // Точка входа в программу - функция WinMain int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd; // Уникальный идентификатор окна (handle) MSG msg; // Объявление структуры типа MSG, для работы с сообщениями hInst = hInstance; // Сохраняем идентификатор приложения // Заполняем структуру WNDCLASS WNDCLASS wc; // Инициализируем выделенную для структуры память нулями ZeroMemory(&wc, sizeof(wc)); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.hInstance = hInst; wc.hIcon = LoadIcon(hInst, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wc.lpszClassName = AppName; RegisterClass(&wc); // Создаем и регистрируем оконный класс // Создаем окно программы hWnd = CreateWindow( AppName, // Имя класса окна AppName, // Заголовок окна WS_OVERLAPPEDWINDOW, // Стиль окна CW_USEDEFAULT, 0, // Горизонтальная и вертикальная позиции окна 300, 300, // Ширина и высота окна NULL, // Хендл родительского окна NULL, // Хендл меню hInst, // Идентификатор приложения NULL); // Дополнительные данные окна ShowWindow(hWnd, SW_SHOW); // Отображаем окно UpdateWindow(hWnd); // Перерисовываем окно // Стандартный цикл обработки сообщений while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } // Оконная процедура LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, msg, wParam, lParam); } return 0; } Теперь давайте рассмотрим приведенный код подробнее. К сожалению, привести здесь описания всех типов данных, структур, функций и т.д., используемых в Win32 API, не представляется возможным, поэтому советую обратиться к официальному источнику, где можно найти всю необходимую информацию о программировании под Windows - Microsoft Developer Network (msdn.microsoft.com). Для того чтобы создать окно, сначала необходимо зарегистрировать в системе новый оконный класс. Для этого нужно заполнить структуру WNDCLASS и передать указатель на область памяти, содержащую эту стуктуру, функции RegisterClass(). Данная функция создает и регистрирует новый оконный класс, используя значения элементов переданной ей структуры для определения характеристик класса. Ниже приведены описания всех элементов структуры WNDCLASS. style - стиль окна данного класса. lpfnWndProc - указатель на функцию окна, которая вызывается каждый раз при получении окном нового сообщения. cbClsExtra и cbWndExtra - дополнительный размер резервируемой памяти (в байтах) для структур класса и окна. hInstance - идентификатор приложения. hIcon - идентификатор иконки, связанной с классом. hCursor - идентификатор курсора, связанного с классом. hbrBackground - идентификатор кисти, которой будет закрашен фон окна. lpszMenuName - имя меню. lpszClassName - имя создаваемого класса окна. Как вы, наверное, заметили, в приведенном выше коде явно заполняются не все поля структуры, а только те, которые необходимы в для данного класса. Все остальные поля инициализируются нулевыми значениями с помощью функции ZeroMemory(), которая выполняет аналогичное ее имени действие. После регистрации класса окна можно приступать к созданию самого окна. Для этого используется функция CreateWindow(), которая возвращает хендл создаваемого окна. Создав окно, нам необходимо отобразить его на экране. Этим занимается функция ShowWindow(), которая принимает в качестве аргументов идентификатор окна, и флаг, указывающий на способ отображения окна (в данном случае SW_SHOW, определяющий, что окно необходимо показать на экране). Затем, с помощью функции UpdateWindow() мы посылаем нашему окну сообщение WM_PAINT, указывающее на необходимость перерисовать клиентскую область окна. Далее следует цикл обработки сообщений. Он состоит из управляющей структуры while, которая при каждом проходе цикла получает очередное сообщение из очереди, посредством функции GetMessage(), затем переводит все сообщения от виртуальных клавиш в символьные сообщения с помощью функции TranslateMessage() (о предназначении данной операции мы поговорим позже), и после этого отсылает полученное сообщение на обработку оконной процедуре, используя функцию DispatchMessage(). Функция GetMessage() возвращает ненулевое значение, поэтому цикл не завершается до момента завершения программы. При завершении программы окну посылается сообщение WM_QUIT, которое является единственным сообщением, при получении которого функция GetMessage() возвращает ноль, и цикл обработки сообщений завершается, а код выхода из программы, хранящийся в элементе wParam структуры MSG, возвращается функцией WinMain. И наконец, пора разобраться каким же образом оконная процедура обрабатывает переданные ей сообщения. У функции окна имеется четыре аргумента: hWnd - идентификатор окна. msg - код текущего сообщения. wParam и lParam - дополнительная информация о сообщении. В Windows существует более тысячи стандартных сообщений. Конечно же, программист не должен обрабатывать их все. Для этого существует функция DefWindowProc(), которая обрабатывает переданное ей сообщение по умолчанию. Таким образом, вы должны обрабатывать только те сообщения, обработка по умолчанию которых вас не устраивает. Также, функция DefWindowProc() не обрабатывает сообщение WM_DESTROY, поэтому вы должны предусмотреть его обработку самостоятельно. В приведенном примере, при получении окном сообщения WM_DESTROY, мы, с помощью функции PostQuitMessage(), ставим в очередь сообщение WM_QUIT, чтобы завершить работу программы. Заметьте, каким образом сообщения обрабатываются по умолчанию. В структуре switch оконной процедуры предусмотрена метка default, которая пересылает все необрабатываемые нашей программой сообщения функции DefWindowProc() и возвращает результат этой функции. А если сообщение обрабатывается нашей программой, тогда возвращается ноль. Вот оно, чудо теперь, разобравшись с кодом программы, откомпилируйте созданный проект и запустите приложение. Вы увидите пустое окно, с которым уже можно выполнять стандартные действия - перемещать, изменять размеры, сворачивать/разворачивать, и даже закрыть! : Все это достигается одним единственным стилем окна WS_OVERLAPPEDWINDOW, определенным при создании окна функцией CreateWindow(). Примечание: в элементе style, структуры WNDCLASS, определяется общий стиль для всех окон данного класса. Следует заметить, что стиль класса это не тоже самое что и стиль окна, указанный в вызове функции CreateWindow(). Тот стиль, который устанавливается посредством функции CreateWindow(), является индивидуальным стилем окна, а не общим стилем, определенным в классе. Ресурсы программы Практически в каждой Windows-программе можно увидеть различные элементы управления, меню, и другие ресурсы программы. Создать в окне какой либо элемент управления, например, кнопку, можно двумя способами. Первый, это создать новое окно используя функцию CreateWindow() с предопределенным в системе оконным классом "button". Второй способ, это использовать файлы ресурсов, в которых содержится описания всех ресурсов программы, будь то меню, элементы управления, иконки и даже диалоговые окна. Каждый элемент управления имеет свой уникальный идентификатор (хендл) определяемый программистом. Когда пользователь совершает какие либо действия над элементом управления, сообщение об этом поступают окну, и после этого выполняются соответствующие действия. К примеру, при нажатии на кнопку окно получает сообщение WM_COMMAND, которое в параметре wParam содержит идентификатор кнопки.