MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Подклассы окон

Название:Подклассы окон
Просмотров:69
Раздел:Информатика, программирование
Ссылка:none(0 KB)
Описание: Подклассы окон Сейчас нам надо рассмотреть один интересный прием - порождение подкласса окон. Часто бывает так, что возможностей, предоставляемых окном того или иного стандартного класса Вам не хватает, а со

Часть полного текста документа:

Подклассы окон

Сейчас нам надо рассмотреть один интересный прием - порождение подкласса окон. Часто бывает так, что возможностей, предоставляемых окном того или иного стандартного класса Вам не хватает, а создавать эквивалентный стандартному класс с небольшими отличиями слишком сложно. В этом случае было бы удобно научиться создавать дополнительные классы окон, основанные на уже известных классах.

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

Для реализации этого метода нам надо сделать три вещи:

·   узнать адрес процедуры обработки сообщений заданного окна (или заданного класса).

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

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

Первую и третью задачи удобно решать с помощью функции

LONG  SetWindowLong( hWnd, GWL_WNDPROC, lpfnNewProc );

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

Теперь нам надо только организовать обращение к старой процедуре обработки сообщений вместо процедуры по умолчанию (DefWindowProc). Сделать это непосредственно мы не можем, так как при вызове оконной процедуры мы должны связать ее с приложением, зарегистрировавшем этот класс. Вместо этого нам надо воспользоваться функцией:

LONG  CallWindowProc( lpfnProc, hWnd, wMsg, wPar, lPar );

Итак, приведем небольшой пример:

static HANDLE hInstance;

static FARPROC lpfnNewProc;

static FARPROC lpfnOldProc;

LONG WINAPI ChildProc( HWND, UINT, UINT, LONG );

// функция обработки сообщений главного окна

LONG WINAPI _export WinProc(

HWND hWnd, UINT wMsg, UINT wPar, LONG lPar

) {

static HWND hChild;

switch ( wMsg ) {

case WM_CREATE:

lpfnNewProc= MakeProcInstance( (FARPROC)ChildProc, hInstance );

hChild=     CreateWindow(

“BUTTON”, “Btn A”,

BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE,

10,10, 50,50,

hWnd, 0, hInstance, NULL

);

// заменяем процедуру обработки сообщений дочернего окна

lpfnOldProc= (FARPROC)SetWindowLong(

hChild,GWL_WNDPROC,(LONG)lpfnNewProc

);

break;

case WM_DESTROY:

DestroyWindow( hChild );

FreeProcInstance( lpfnNewProc );

break;

...

}

return DefWindowProc( hWnd, wMsg, wPar, lPar );

}

LONG WINAPI _export ChildProc(

HWND hWnd, UINT wMsg, UINT wPar, LONG lPar

) {

// специфичная обработка сообщений

// и вызов прежней функции, а не функции DefWindowProc

return CallWindowProc( lpfnOldProc, hWnd, wMsg, wPar, lPar );

}

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

LONG  SetClassLong( hWnd, GCW_WNDPROC, lpfnNewProc );

Что неудобно, так это то, что мы должны сначала создать окно, а только затем заменять процедуру обработки сообщений. Мы можем поступить и иначе - сначала узнать адрес процедуры обработки сообщений, используя функцию

GetClassInfo( hInstance, lpszClassName, lpWndClass );

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


Связывание данных с окном

При работе с окнами очень часто возникает необходимость хранения данных, связанных с окном. ............







Похожие работы:

Название:Особенности процедуры рассмотрения арбитражными судами дел в сфере экономической деятельности, связанной с договорами поставки
Просмотров:499
Описание: ВВЕДЕНИЕ   Актуальность темы исследования. Договор поставки самый распространенный и важный договор предпринимательской деятельности. Данный вид договора преобладает в обороте рыночного общества, так ка

Название:Документирование процедуры предоставления отпусков работникам организации
Просмотров:446
Описание: Дипломная работа ДОКУМЕНТИРОВАНИЕ ПРОЦЕДУРЫ ПРЕДОСТАВЛЕНИЯ ОТПУСКОВ РАБОТНИКАМ ОРГАНИЗАЦИИ СОДЕРЖАНИЕ ВВЕДЕНИЕ I. ПОРЯДОК ПРЕДОСТАВЛЕНИЯ ОСНОВНЫХ ВИДОВ ОТПУСКОВ 1.1

Название:Застосування водолікувальних процедур в реабілітації хворих при захворюваннях травної системи
Просмотров:345
Описание: Курсова робота Застосування водолікувальних процедур в реабілітації хворих при захворюваннях травної системи Содержание ВСТУП РОЗДІЛ 1.Фізіологічні основи механізму дії мінеральних вод 1.1 Критері

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

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

 
     

Вечно с вами © MaterStudiorum.ru