43594 (662702), страница 4

Файл №662702 43594 (Windows) 4 страница43594 (662702) страница 42016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

Для того, чтобы зарегистрировать класс окон, следует правильно заполнить структуру типа WNDCLASS и передать эту структуру в виде параметра функции RegisterClass. Структура класса окна имеет вид:

typedef struct tagWNDCLASS

WORD style; // тип окна

LONG (FAR PASCAL *lpfnWndProc)(); // функция окна int cbClsExtra; // размер доп. памяти

int cbWndExtra; // размер доп. памяти

HANDLE hInstance; // индекс копии приложения

HICON hIcon; // индекс пиктограммы

HCURSOR hCursor; // индекс курсора

HBRUSH hbrBackground; // цвет фона окна

LPSTR lpszMenuName; // имя меню

LPSTR lpszClassName; // имя класса окна

WNDCLASS;

lpszClassName - указатель на строку, содержащую имя класса. Поскольку определенный в приложении класс доступен всем приложениям, имя класса не должно повторятся в разных приложениях.

hInstance - манипулятор копии, создающей класс окна; должно содержать индекс копии приложения.

lpfnWndProc - указатель на функцию поддержки окна. Краткое описание этой функции смотри в следующем разделе.

style - содержит набор флагов, определяющих свойства окна. По умолчанию присваивается NULL.

hBrBackground - определяет цвет фона окна.

hCursor - определяет курсор, используемый в данном окне по умолчанию.

hIcon - определяет пиктограмму (icon), которая будет отображаться при переводе окна в неактивное состояние.

lpszMenuName - указатель на имя меню окна, определенное в файле ресурсов.

cbClsExtra - определяет число байт, которое необходимо дополнительно запросить у Windows под эту структуру. Этот обьем памяти будет зарезервирован в конце структуры для всех окон данного класса.

clWndExtra - определяет число байт, которое необходимо дополнительно запросить у Windows для размещения всех структур, создаваемых совместно с данным классом.

После определения полей структуры WNDCLASS необходимо зарегистрировать класс при помощи функции RegisterClass.

BOOL FAR PASCAL RegisterClass( LPWNDCLASS winClass );

Если регистрация класса прошла успешно, то возвращаемое значение TRUE, в противном случае - FALSE.

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

Функция окна приложения

Функция окна приложения занимается тем, что обрабатывает все сообщения для окон данного класса. Это функция всегда

вызывается неявно Windows при поступлении сообщений в окно, за

которым оно закреплено. Функция окна имеет вид:

long far PASCAL WndProc ( HWND hwnd,

WORD msg,

WORD wParam,

LONG lParam );

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

msg - идентификатор приложения;

wParam и lParam определяют дополнительную информацию и зависят от типа сообщения.

Для облегчения работы программиста существует

специальная функция обработки сообщений DefWindowProc с теми

же параметрами, которая производит стандартную обработку всех

сообщений. Кроме того она играет ключевую роль в формировании

информационных потоков сообщений Windows, и ее указание в

функции окна обязательно.

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

Создание окна производится при помощи функции

CreateWindow. Она создает окно, имеющее указанный тип и принадлежащее к указанному классу. Прототип функции имеет вид:

HWND FAR PASCAL CreateWindow

(

LPSTR, // имя класса окна

LPSTR, // заголовок окна

DWORD, // тип окна

int, // X-координата

int, // Y-координата

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

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

HWND, // Дескриптор копии-родителя

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

HANDLE, // Дескриптор копии

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

);

Тип окна является комбинацией битовых флагов,

определяющих стиль окна. Возможные значения типа окна рассмотрены ниже.

Дескриптор копии-родителя определяет порождающее окно. Он определяет, где существует окно и может ли окно быть автоматически показано/скрыто/уничтожено (для всех типов окон). Когда показывается, скрывается или уничтожается, все порожденные им окна разделяют его судьбу

Дескриптор меню позволяет определить меню, которое будет изображаться в окне.

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

инициализации окна.

Последний параметр функции позволяет передать указатель на данные в оконную процедуру. Указатель передается с самым первым сообщением WM_CREATE, что необходимо для обеспечения данных при инициализации окна.

В случае успешного создания окна функция CreateWindow возвращает индекс окна.

Отображение и обновление окна

Окно не отображается на экране сразу после создания; для отображения окна используется функция ShowWindow. Ее прототип:

BOOL FAR PASCAL ShowWindow( HWND wnd, int cmdShow );

wnd - дескриптор отображаемого окна;

cmdShow - определяет, как окно первоначально будет отображаться на экране:

SW_SHOWNORMAL - обычное окно;

SW_SHOWMINIMIZED - минимизированное в виде пиктограммы; SW_SHOWMAXIMIZED - максимизорованное на весь экран;

Для обновления окна используется функция UpdateWindow. Ее прототип выглядит так:

void FAR PASCAL UpdateWindow( HWND wnd );

Типы окна

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

WS_OVERLAPPED - перекрывающееся окно. Перекрывающиеся окна - это основной наиболее универсальный тип окон Windows. Главное окно приложения обычно имеет такой вид.

WS_POPUP - вспомогательные окна. Они используются чаще всего для отображения окон диалога. Вот некоторые свойства вспомогательных окон:

- если такое окно имеет родительское окно, то всегда отображаются поверх всех окон на экране, даже когда пользователь делает активным другое окно;

- вспомогательные окна не имеют заголовка и часто должны иметь фиксированный размер.

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

- дочерние окна никогда не отображаются вне своего родительского окна ни в раскрытом виде, ни в виде пиктограммы;

- координаты дочерних окон отчитываются от верхнего левого угла рабочей области окна-родителя и при перемещении последнего, дочерние окна перемещаются вместе с ним;

- дочернее окно никогда не может стать активным окном.

WS_MINIMIZE - создаваемое окно будет отображено в виде пиктограммы.

WS_VISIBLE - Окно становится видимым сразу после создания. Используется для диалоговых окон.

WS_DISABLED - создается неактивное окно.

WS_CLIPSIBLINGS - исключение областей, занимаемых

другими дочерними окнами из изменяемой области дочернего окна.

Используется только для дочерних окон.

WS_CLIPCHILDREN - исключение областей, занимаемых

другими дочерними окнами при изменении рабочей области

родительского окна. Используется только для родительских окон.

WS_MAXIMIZE - создаваемое окно будет отображено в максимально возможном виде.

WS_CAPTION - окно имеет рамку и заголовок, а следовательно пользователь может перемещать его при помощи мыши.

WS_BORDER - окно имеет широкую рамку без заголовка. Используется при создании диалоговых окон.

WS_DLGFRAME - окно имеет тонкую рамку без заголовка.

WS_VSCROLL - окно имеет вертикальную полосу просмотра.

WS_HSCROLL - окно имеет горизонтальную полосу просмотра.

WS_SYSMENU - окно имеет системное меню.

WS_THICKFRAME - создаваемое окно имеет рамку существенно заметной толщины.

WS_MINIMIZEBOX - окно имеет кнопку минимизации.

WS_MAXIMIZEBOX - окно имеет кнопку максимизации.

Построение меню

Для создания меню нужно проделать:

1. Задать структуру меню в файле ресурсов,

последовательно определив пункты меню в виде текстовых строк.

2. Каждому пункту меню поставить в соответствие

уникальный идентификатор.

3. Указать имя меню в структуре класса окна.

Определение меню

Определение меню в файле ресурсов должно иметь вид:

MenuName MENU [опции загрузки][опции памяти]

BEGIN

MENUITEM "Item1" IDM_Item1 [, опции]

MENUITEM "Item2" IDM_Item3 [, опции]

...

POPUP "Item3" [, опции]

BEGIN

MENUITEM "Item3-1" IDM_Item3-1 [, опции] MENUITEM "Item3-2" IDM_Item3-2 [, опции] ...

END

END

MenuName - имя ресурса меню для обращения из подпрограммы.

Опции загрузки определяет как следует поступить с ресурсом при загрузке приложения на выполнение - сразу загрузить или при неоходимости.

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

Пункты меню определяются между словами BEGIN и END. Они могут быть двух видов: MENUITEM и POPUP. Пункт типа MENUITEM является конечным пунктом меню. При выборе этого пункта функции окна сообщения передается сообщение WM_COMMAND с идентификатором пункта меню в качестве параметра. Пункт типа POPUP является заголовком подменю.

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

GRAYED - пункт меню не активен. Текст пункта меню отображается в сером цвете.

INACTIVE - пункт меню не активен. Текст пункта меню отображается также как и в других пунктах.

MENUBREAK - этот и следующий за ним пункты меню отображаются в новом столбце (если указан для главного меню, то в новой строке).

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

CHECKED - пункт меню помечен галочкой, помещенной слева от него. Не действует для пунктов главного меню.

SEPARATOR - определяет разделитель, который выделяет в группы связанные списки меню.

HELP - пункт меню выравнивается по правой стороне меню.

Обьекты диалога

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

Взаимодействие между родительским окном (окном диалога) и обьектами диалога осуществляется посредством сообщений. Когда пользователь производит какое-либо действие с обьектом диалога, функции окна родителя передается сообщение WM_COMMAND, в качестве параметра wParam которого передается индекс обьекта диалога, а в качестве параметра lParam - специальная дополнительная информация.

Для того, чтобы сконструировать обьект диалога нужно:

1. Зарегистрировать класс окна диалога.

2. Создать дочернее окно функцией CreateWindow, указав зарегистрированный класс окна.

3. В функции окна обьекта диалога определить дескриптор дочернего окна при помощи функции GetParent.

4. По тому или иному действию пользователя уведомлять родительское окно соответствующими сообщениями при помощи функции SendMessage.

Для обьектов диалога как дочерних окон не требуется регистрировать класс окна - в Windows определены стандартные классы окон - обьектов диалога: "button", "edit", "scrollbar", "listbox" и пр.

При использовании стандартных классов Windows для создания обьекта диалога нужно вызвать только функцию CreateWindow.

Рассмотрим основные обьекты диалога.

Кнопки и переключатели

Кнопка "Button" обычно используется для осуществления каких - либо немедленных действий, без переключения или включения/выключения каких-либо опций.

Переключатель "И" ("CheckBox") используется как

переключатель опций вкл/выкл. Будучи соединенными в группу

переключатели реализуют логику "И".

Переключатель "ИЛИ" ("RadioButton") используется как переключатель опций вкл/выкл. Будучи соединенными в группу переключатели реализуют логику "ИЛИ".

Вокруг этих трех основных типов имеются некоторые вариации. Ниже приводится описание стандартных классов кнопок

и переключателей.

BS_PUSHBUTTON - определяет кнопку с жирной рамкой.

Характеристики

Тип файла
Документ
Размер
397,56 Kb
Материал
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6513
Авторов
на СтудИзбе
302
Средний доход
с одного платного файла
Обучение Подробнее