- •5. Программирование в операционной системе windows
- •5.1. Основные концепции Windows
- •Контрольные вопросы
- •5.2. Архитектура, управляемая событиями
- •Контрольные вопросы
- •5.3. Примеры программ.
- •Int winapi WinMain (hinstance hInstance,
- •Int CmdShow)
- •Int winapi WinMain (hinstance hInstance,
- •Int MessageBox (hwnd hWnd, lpctstr lpText, lpctstr lpCaption, uint uType).
- •Int winapi WinMain(hinstance hInstance, hinstance hPrevInstance, lptstr lpCmdLine, int nCmdShow)
- •If (!RegisterClassEx(&wc))
- •If (!hMainWnd)
- •Int nWidth,
- •Int nHeight,
- •Контрольные вопросы
- •5.4. Программирование графики
- •Bool InvalidateRect (hwnd hWnd, const rect* lpRect, bool bErase);
- •Bool InvalidateRgn (hwnd hWnd, hrgn hRgn, bool bErase);
- •Bool ClientToScreen(hwnd hWnd, lpoint lpPoint); bool ScreenToClient(hwnd hWnd, lpoint lpPoint);
- •Контрольные вопросы
- •5.5. Рисование линий, фигур, текста
- •GetCurrentPositionEx (hdc, &pt);
- •Bool Polyline (hdc hdc, const point* lppt, int cPoints);
- •Bool PolylineTo (hdc hdc, const point* lppt, dword cPoints);
- •Bool Arc (hdc hdc, int xLeft, int yTop, int xRight, int yBottom, int xStart, int yStart, int xEnd, int yEnd);
- •SetArcDirection (hdc, ad_clockwise);
- •Bool Rectangle (hdc hdc, int xLeft, int yTop, int xRight int yBottom);
- •Bool Ellipse (hdc hdc, int xLeft, int yTop, int xRight, int yBottom);
- •Bool Polygon (hdc hdc, const point * lpPoints, int nCount);
- •Контрольные вопросы
- •5.6. Средства ввода
- •If (!RegisterClassEx(&wc))
- •X, y, width, height, hParent,
- •If (!hWnd)
Контрольные вопросы
5.3. Примеры программ.
5.3.1. Простейшая программа для Windows. Для создания программы необходимо выполнить следующие действия:
Запустить CodeGear RAD Studio for Microsoft Windows;
В меню File New выбрать VCL Form Application – C++ Builder , будет создан новый проект;
В меню Project выбрать пункт Remove from Project (Удалить из проекта);
Удалить Unit1.cpp из проекта;
В окне File выбрать Project1.cpp;
Появившийся в окне редактора текст исправить следующим образом
#include <windows.h>
#include <vcl.h>
Int winapi WinMain (hinstance hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
Int CmdShow)
{
MessageBox(NULL,
“Для продолжения нажмите на кнопку”,
“Выполняется наипростейшая программа для Windows”,
MB_OK);
return 0;
}.
Запустить программу.
На экране появится окно, представленное на рис. 5.2. Возможные действия с этой программой просты, и обсуждаться не будут, а содержание самой программы стоит обсудить.
Окно простейшей программы для Windows
Рис. 5.2
В первых двух строках программы находятся инструкции
#include <windows.h>
#include <vcl.h>.
Эти директивы подключают к программе главный заголовочный файл Windows-приложений и заголовочный файл компонентов VCL системы программирования.
Далее следует заголовок функции WinMain
Int winapi WinMain (hinstance hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int CmdShow).
С вызова этой функции всегда начинается выполнение программы. Функция возвращает значение целого типа, а получает значения следующих параметров:
- HINSTANCE hInstance – дескриптор приложения, Windows автоматически присваивает ему значение при запуске;
- HINSTANCE hPrevInstance – дескриптор предыдущего экземпляра приложения, если одновременно выполняется несколько экземпляров приложения; этот параметр остался для совместимости с ранними версиями Windows и поэтому всегда принимает нулевое значение;
- LPSTR lpCmdLine – указатель на строку, в которую копируются параметры приложения, если оно запускается в режиме командной строки; для Windows такой способ запуска программы скорее является экзотикой, т.к. запуск программы щелчком мыши не предполагает передачи каких либо параметров;
- int CmdShow – целое значение, которое может быть передано функции ShowWindow; этот параметр в нашем примере не используется и будет рассмотрен позже.
Спецификатор WINAPI определяет соглашения о вызове, т.е. принятывй в Windows порядок передачи параметров в функцию. Для нашей дальнейшей работы этой информации достаточно, поэтому нужно запомнить, что этот спецификатор должен присутствовать всегда.
Разобравшись с заголовком функции, перейдем к ее телу. Здесь имеется вызов функции MessageBox, которая, собственно, и выполняет всю содержательную работу приложения.
Возникют вопросы. Где цикл обработки сообщений? Где текст оконной процедуры? Ответ на поставленные вопросы заключается в том, что написание такой лаконичной программы стало возможным только благодаря использованию функции MessageBox. Если поближе познакомиться с указанной функцией, то можно обнаружить, что функция MessageBox создает, отображает и обслуживает окно сообщений. Окно сообщений – это диалоговое окно, содержащее указанное программистом текстовое сообщение и одну или несколько кнопок. Заголовок функции имеет вид: