Какого пункта нет в структуре программы

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

Любая программа под Windows состоит минимум из двух функций — WinMain() и оконной функции.
Функция WinMain() должна выполнять следующие операции:

1. Определять класс окна

2. Регистрировать класс окна

3. Поиск уже запущенной копии приложения

4. Создавать окно данного класса

5. Отображать окно

6. Запускать цикл обработки сообщений

Оконная функция предназначена для обработки сообщений, относящихся к данному окну

Исходный текст приложения, которое создает главное окно. При нажатии левой клавишей мыши в клиентской области окна при помощи стандартной диалоговой панели сообщений выдается информация о приложении.

// — Обязательный включаемый файл

// — Прототип функции главного окна

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

Простейшая программа на Python и линейная структура программы. Лаба для неспециалистов в ИТ.

// — Объявление глобальных переменных

HINSTANCE hInst; // Дескриптор экземпляра приложения

char ClassName[]=»Window»; // Название класса окна

// — Главная функция приложения WinMain

int APIENTRY _tWinMain(HINSTANCE hInstance,

LPSTR lpCmdLine, int nCmdShow)

WNDCLASS wc; // Структура для инф-ции о классе окна

HWND hWnd; // Дескриптор главного окна приложения

MSG msg; // Структура для хранения сообщения

// — Проверяем, было ли приложение запущено ранее.

// Если прилож. было запущено ранее, активизировать

// и выдвинуть на передний план его главное окно

if(IsIconic(hWnd)) ShowWindow(hWnd, SW_RESTORE);

// Работа новой копии прекращается.

// Заполнение полей стр-ры WNDCLASS

memset( // Очистка полей структуры 0

wc.lpszClassName=ClassName; // Имя класса окон

wc.lpfnWndProc=(WNDPROC)WndProc; //Адр. окон. ф-ции

wc.style=CS_HREDRAW|CS_VREDRAW; // Стиль класса окон

wc.hInstance=hInstance; // Экземпляр приложения

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);// Пиктограмм-ма для окон

wc.hCursor=LoadCursor(NULL,IDC_ARROW); // Курсор мыши для окон

wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // Кисть для окон

wc.lpszMenuName=NULL; // Ресурс меню окон

wc.cbClsExtra=0; // Дополнительная память

wc.cbWndExtra=0; // Дополнительная память

// Pегистрация класса окна.

// Создаем главное окно приложения.

ClassName, // Имя класса окон

WS_OVERLAPPEDWINDOW, // Стиль окна

CW_USEDEFAULT, // Ширина окна

CW_USEDEFAULT, // Высота окна

NULL, // Дескриптор окна-родителя

NULL, // Дескриптор меню окна

hInst, // Дескриптор экз. приложения

NULL); // Дополнительная информация

// Окно не создано, выдается предупреждение.

MessageBox(NULL,»Window create error», AppTitle,

// Обновление содержимого клиентской области окна.

// Запуск цикла обработки очереди сообщений.

Структура программы и проекта на C#

while(GetMessage( // Завершение работы приложения

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)

// Нажата левая кнопка мыши в клиентской обл. окна.

// Вывод информации о приложении с помощью

// диалоговой панели сообщений MessageBox()

MessageBox(hWnd, «Win32 aplication», «Window»,

// Пользователь удалил окно.

// Если это оконная функция главного окна, то следует

// в очередь сообщений послать сообщение WM_QUIT

// Необработанные сообщ. передаются в стандартную

// функцию обработки сообщений по умолчанию.

return DefWindowProc(hWnd, msg, wParam, lParam);

Пояснения к тексту программы

Главная функция приложения WinMain

Точкой входа для любой Windows-программы является функция WinMain, которая всегда определяется следующим образом:

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE

hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

Эта функция использует последовательность вызовов APIENTRY (соглашение о передаче аргументов при вызове функций WINAPI) и, по своему завершению, возвращает операционной системе Windows целое число.

Назначение параметров функции WinMain:

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

· hPrevInstance ранее использовался в Win16 и в Win32 всегда равен NULL.

· lpCmdLine является указателем на оканчивающуюся нулем строку, в которой содержаться параметры, переданные программе из командной строки.

· nCmdShow определяет, как приложение первоначально отображается на дисплее: пиктограммой (SW_SHOWMINNOACTIVE) или в виде открытого окна (SW_SHOWNORMAL).

Поиск работающей копии приложения

Читайте также:
Обзор программ для эвм

Для проверки того было ли приложение запущено ранее, используется функция FindWindow, которая позволяет найти окно верхнего уровня по имени класса или по заголовку окна:

HWND FindWindow(LPCTSTR lpClassName,

· lpClassName – это указатель на текстовую строку, в которой задается имя класса искомого окна. На базе одного и того же класса может быть создано несколько окон.

· lpWindowName – это указатель на текстовую строку, содержащую искомый заголовок окна. Если же подойдет любое окно, то параметр lpWindowName имеет значение NULL.

В приведенном тексте функции WinMain, проверяется, было ли ранее приложение запущено и при положительном ответе выдвигается на передний план главное окно ранее запущенной копии с помощью функции SetForegroundWindow(hWnd);

Замечание. Если необходимо, чтобы каждая копия приложения работала как отдельный процесс, то указанный фрагмент кода следует не включать в функцию WinMain.

Регистрация класса окна

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

ATOM RegisterClass(const WNDCLASS *lpwc);

Параметр lpwc указывает на структуру типа WNDCLASS, описывающую тип нового окна. Возвращаемое значение является атомом Windows – 16-разрядным значением, идентифицирующим уникальную символьную строку в таблице Windows.

Затем приложение должно создать само окно с помощью функции CreateWindow, которая возвращает дескриптор созданного окна типа HWND:

HWND CreateWindow(LPCSTR lpClassName, LPCSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID *lpParam);

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

Параметры функции CreateWindow:

· lpClassName указывает имя класса, поведение которого наследует данное окно. Этот класс должен быть зарегистрирован с помощью фунцкии RegisterClass или может быть одним из предопределенных классов элементов управления с именами “button”, “combobox”, “listbox”, “edit”, “scrollbar” и “static”.

· lpWindowName определяет строку, которая выводится в заголовке создаваемого окна.

· dwStyle определяет стиль окна. (см. тему «Классы и стили окон»).

· x, y, nWidth и nHeight задают начальные геометрические размеры окна. Если при задании параметров x, y, nWidth и nHeight использовать константу CW_USEDEFAULT, то Windows установит расположение и размеры окна самостоятельно.

· hWndParent задает для создаваемого окна дескриптор его окна-родителя. Если окно является главным окном приложения, то этому параметру присваивается значение NULL.

· hMenu определяет для окна дескриптор меню. Значение NULL на месте дескриптора меню говорит о том, что у окна будет только меню класса, общее для всех окон этого класса.

· hInstance задает дескриптор экземпляра приложения, которое создает окно.

· lpParam используется для передачи окну дополнительных данных (если их нет, то он должен быть равен NULL).

Для отображения окна на экране используется функция:

BOOL ShowWindow(HWND hwnd, int nCmdShow);

· hwnd задает дескриптор окна.

· nCmdShow задает начальный вид окна на экране (для главного окна приложения используется величина, передаваемая в качестве параметра функции WinMain). Для всплывающих и дочерних окон nCmdShow задает, как окно первоначально отображается: пиктограммой (SW_SHOWMINNOACTIVE) или в виде открытого окна (SW_SHOWNORMAL)..

Для перерисовки рабочей области производится вызов функции:

void UpdateWindow(HWND hwnd);

Функция UpdateWindow передает функции окна сообщение WM_PAINT. Получив его, функция окна обновляет содержимое экрана.

Цикл обработки очереди сообщений

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

Программа извлекает сообщения из очереди сообщений, выполняя блок команд, известный как цикл обработки сообщений (message loop).

Простейший цикл обработки сообщений имеет следующий вид:

while(GetMessage(

· lpmsg является дальним указателем на структуру сообщения типа MSG (см. тему «Сообщения Windows. Типы сообщений»).

· hwnd определяет дескриптор окна – источника сообщений. Если задать этому аргументу NULL, то программа будет получать сообщения от всех окон, созданных программой.

Читайте также:
Андроид не могу закрыть программу

· uMsgFilterMin и uMsgFilterMax позволяют задать диапазон значений для фильтрации сообщений, получаемых программой. Если на их месте задать 0, то программа будет получать все сообщения.

Если поле message сообщения msg, извлеченного из очереди сообщений, равно любому значению, кроме WM_QUIT, то функция GetMessage возвращает ненулевое значение. Если из очереди извлечено сообщение WM_QUIT, то GetMessage возвращает нуль, что прерывает цикл обработки сообщений.

Каждое получаемое приложением сообщение (за исключением WM_QUIT) направлено одному из окон приложения. Поскольку приложение не должно прямо вызывать функцию обработки окна, для передачи сообщения нужному окну используется функция:

LONG DispatchMessage(const MSG FAR* lpmsg);

Эта функция передает msg обратно в Windows, которая отправляет его для обработки соответствующей оконной процедуре.

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

BOOL TranslateMessage(const MSG FAR* lpmsg);

Завершение работы приложения

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

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

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

Оконная функция всегда связана с определенным классом окна, который регистрируется при помощи функции RegisterClass. На основе одного и того же класса можно создать несколько окон.

Оконная функция определяется следующим образом:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg,

WPARAM wParam, LPARAM lParam);

Все четыре параметра оконной процедуры идентичны первым четырем полям структуры MSG.

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

Обработка сообщений в оконной функции

Функция окна получает сообщение из двух источников: из цикла обработки сообщений и от Windows:

· Из цикла обработки сообщений поступают сообщения ввода: перемещение и нажатие клавиш мыши, нажатие и отпускание клавиш клавиатуры и, если установлен генератор событий таймера, сообщения от таймера.

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

Каждое получаемое окном сообщение идентифицируется номером, который содержится в параметре msg оконной функции. Если оконная процедура обрабатывает сообщение, то ее возвращаемым значением должен быть 0.

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

Удаление окна, сообщение WM_DESTROY

Сообщение WM_DESTROY показывает, что Windows находится в процессе ликвидации окна в ответ на полученную от пользователя команду (пользователь вызывает поступление этого сообщения, если нажмет мышью на пиктограмме “Close”, выберет пункт “Close” из системного меню или нажмет комбинацию клавиш Alt+F4).

Главное окно стандартно реагирует на это сообщение, вызывая функцию:

Эта функция ставит сообщение WM_QUIT в очередь сообщений приложения, что заставляет функцию WinMain прервать цикл обработки сообщений и выйти в систему, завершив работу приложения.

Источник: stydopedia.ru

Тест: Среда программирования. Структура программы.
материал для подготовки к егэ (гиа) по информатике и икт (9 класс)

По теме: методические разработки, презентации и конспекты

Этапы решения задач на ПК. Программирование на ЯП Паскаль. Структура программы.

Сценарий урока информатики № 7 в 8 классе по теме: Контрольная работа по теме «Базовые алгоритмические структуры в среде программирования».

Структура программы на языке Pascal

В общем виде структура программы, написанной на языке Pascal, представлена на рис. 7.1 (символы являются элементами записи форматов операторов и должны отсутствовать в операторах Pascal-программы).

Читайте также:
Программа оксфорд английский для детей отзывы

Var Procedure Function

  • — раздел подключаемых модулей ;
  • — раздел объявления меток ;
  • — раздел объявления типов ;
  • — раздел объявления констант ;
  • — раздел объявления переменных ;
  • — раздел объявления процедур ;
  • — раздел объявления функций ;

раздел операторов (инструкций)

? программы, заключенных между ключевыми словами begin и end

точка — признак конца программы

Рис. 7.1. Структура Pascal-программы

Раздел объявлений (описательная часть) предназначен для объявления всех объектов, встречающихся в программе: модулей, меток, типов, констант, переменных, процедур, функций. Порядок следования разделов в описательной части произвольный, за исключением раздела uses, который всегда располагается после заголовка программы. Наличие всех разделов в описательной части не является обязательным: один или несколько разделов могут отсутствовать в этой части. При написании программ следует придерживаться следующего правила: все объявления объектов программы должны быть сделаны до того, как эти объекты будут использованы.

Тело программы (исполнительная часть) начинается со слова begin, затем следуют операторы языка Pascal, реализующие алгоритм решаемой задачи, и заканчивается словом end, после которого ставится точка. В исполнительной части задаются действия над объектами программы, которые объявлены в описательной части. Операторы в языке Pascal отделяются друг от друга точкой с запятой и могут располагаться как в одной строке, так и начинаться с новой строки. Назначения символа ; — отделение операторов друг от друга.

Пример. Программа, вычисляющая сумму двух чисел.

Текст программы с комментариями приведен ниже.

write(‘Для выхода нажмите любую клавишу’);

Результат работы программы:

Введите число а: а=2

Введите число Ь: Ь=3

Для выхода нажмите любую клавишу

Блок-схема решения данной задачи представлена на рис. 7.2.

Сумма двух чисел

Рис. 7.2. Сумма двух чисел

В данном примере имя программы example. Описательная часть содержит два раздела: раздел подключаемых модулей и раздел объявления переменных. Раздел uses подключает стандартный модуль crt для работы с экраном дисплея. В разделе var перечисляются имена переменных одного и того же типа через запятую, после чего ставится двоеточие и указывается тип переменных.

В данном примере описаны три переменные: а — первое число, b — второе число, s — сумма. Все они имеют целый тип integer, это означает, что все переменные являются целыми числами.

со слова begin, после

После описательной части располагается исполнительная часть. Она начинается которого идут операторы языка. Процедура

clrscr (англ, clear screen — очистить экран) модуля crt очищает экран дисплея от информации, которая может остаться от решения предыдущих задач или каких-либо сообщений, и устанавливает курсор в левый верхний угол экрана. Оператор write — оператор вывода. После запуска программы на выполнение на экране появится сообщение «Введите число а: а=». Оператор readin — оператор ввода. После

запуска программы на выполнение необходимо будет ввести целое число (первое число а) и нажать клавишу Enter. Тогда переменной а присваивается значение, равное первому введенному числу. Затем аналогичные действия выполняются для второго числа Ь. В операторе readin окончание in означает, что курсор автоматически перейдет на следующую строку после ввода.

Далее в программе расположен оператор присваивания s:=a+b; (: = — знак присваивания). При выполнении этого оператора переменная s получает значение, равное сумме чисел а и Ь. Так как в результате сложения двух целых чисел получается целое число, то переменная s описана типом integer. Затем расположен оператор вывода writein, который выведет на экран текст, заключенный в апострофы, а за ним значение переменной s.

Функция readkey (англ, read key — читай клавишу) модуля crt приостанавливает выполнение программы до тех пор, пока не будет нажата любая клавиша на клавиатуре. Эта функция применяется для того, чтобы после завершения работы программы экран пользователя не перекрывался экраном среды программирования.

В заключение следует отметить, что данная глава представляет собой первое знакомство читателя с языком программирования Pascal. При этом изучение языка начинается с написания простой программы. На данном примере читатель узнаёт о структуре программы на языке Pascal, знакомится с символами и зарезервированными словами языка.

Источник: bstudy.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru