Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Четыре способа создания и удаления контекста графических устройств




Методы SetWindowLong, SetClassLong, SetWindowPos.

Функция SetWindowLong заменяет атрибут стpуктуpы класса окна новым значением и возвращает предыдущее значение класса окна. Имеет следующие паpаметpы: hWnd-дескриптор окна; nIndex-одна из констант: GWL_EXSTYLE, GWL_STYLE, GWL_WNDPROC или положительное смещение в байтах для доступа к дополнительным четыpех байтным значениям; dwNewLong—значение атрибута замены. Функция SetClassLong (ByVal hwndAsLong, ByValnIndexAsLong, ByValdwNewLongAsLong) –устанавливает в нужное поле структуры WndClass соответствующее значение и возвращает старое значение поля или ноль, если ошибка. Она является парной функцией к функции GetClassLong. Имеет следующие параметры: hWnd-дескриптор окна; nIndex-одна из

Констант GCL_XXX из функции GetClassLong, определяющее нужное поле; dwNewLong-поле замены. Функция SetWindowPos (ByVal hwndAsLong, ByValhWndInsertAfterAsLong, ByValx AsLong, ByValy AsLong, ByValcxAsLong, ByValcyAsLong, ByValwFlagsAsLong) –устанавливает окно в новую позицию. Имеет параметры: hWnd-дескриптор окна; hWndInsertAfter-дескриптор окна, перед которым в списке Z-order (определяет порядок расположения элементов окна) будет вставлено окно hWnd или одна из следующих констант:•HWND_BOTTOM –поместить окно на дно списка Z-order;

•HWND_TOP –поместить окно на верх списка Z-order; •HWND_TOPMOST –поместить окно поверх всех окон;

•HWND_NOTOPMOST –убрать окно с позиции«поверх всех окон».


Существуют 4 способа получения и удаления контекста устройства, каждый из которых определяется парой под программ. 1. Для перерисовки части рабочей области окна используется функция BeginPaint (ByValhwndAsLong, lpPaintAsPAINTSTRUCT)AsLong Эта функция возвращает дескриптор экранного контекста рабочей области, требующей обновления в ответ на сообщение с константой WM_PAINT. Размеры области определяются ОС Windows в структуре PAINTSTRUCT. Сообщение с константой WM_PAINT должно обрабатываться оконной функцией приложения. Удаление контекста, созданного функцией BeginPaint, осуществляется процедурой EndPaint (ByValhwndAsLong, lpPaintAsPAINTSTRUCT)AsLong, завершающей операцию по отображению в окне hWnd графической информации. Сообщение c константой WM_PAINT посылается ядром Windows, если необходимо перерисовать часть(или всю) рабочей области окна. Например, когда окно было частично перекрыто другим окном или часть окна потеряла свое прежнее содержимое и требует обновления. В этом случае ядро определяет ту область, которая подлежит перерисовке, и посылает программе ее координаты в структуре PAINTSTRUCT и сообщение с константой WM_PAINT, в ответ на которое прикладная программа должна сама восстановить содержимое окна. Первый раз прикладная программа получает это сообщение при вызове функции UpdateWindows. Оно также посылается и в случае изменения размеров окна, если стиль класса окна указан с атрибутами CS_HREDRAW иCS_VREDRAW. Попробуйте удалить функцию UpdateWindows из программы, основанной на обработке сообщений, и Вы уже не сможете работать с константами сообщений WM_RBUTTONDOWN, WM_CHAR, WM_KEYDOWN. 2. Для перерисовки всей рабочей области окна используется функция GetDC (ByValhwndAsLong) AsLong Эта функция возвращает дескриптор контекста этой области. Удаление контекста, созданного функцией GetDC, осуществляется другой функцией ReleaseDC(ByValhwndAsLong, ByVal hdc As Long) As Long, которая освобождает контекст указанного окна и делает его обще доступным.

3.Для перерисовки всего окна, включая области, занятые заголовком, рамкой и меню, используется функция GetWindowDC(ByValhwndAsLong) AsLong Функции GetWindowDC в программе должна соответствовать функция ReleaseDC.

4.Для перерисовки всего экрана или для создания дескриптора контекста других графических устройств(принтера, плоттера) используется функция

CreateDC (ByVallpDriverNameAsString, ByVallpDeviceNameAsString, ByVallpOutputAsString,lpInitDataAsDEVMODE) AsLong,гдеlpDriverNameиlpDeviceName—имя драйвера и устройства;

lpOutPut-имяпорта ввода-вывода;

lpInitData-ссылка на

структуру типа DEVMODE, содержащую информацию о начальных установках принтера(плоттера). Функции CreateDC в программе должна соответствовать функция DeleteDC.


85. Основные характеристики контекста устройств. Способы задания цвета объектов в окне.

Во многих случаях стандартные параметры контекста нуждаются в изменении. Чаще возникает необходимость смены чертежного инструмента. Для этого в распоряжении программиста есть два способа: выбор инструмента из базового(встроенного, предопределенного) набора инструментов или создание собственного(логического) инструмента. Доступ к базовому набору(т.е. получение дескриптора инструмента) открывается функцией: GetStockObject (ByVal nIndex AsLong) AsLong Полученный с помощью GetStockObject дескриптор базового инструмента затем включается в контекст с помощью функции SelectObject (ByValhdcAsLong, ByValhObjectAsLong) AsLong


 




Поделиться с друзьями:


Дата добавления: 2014-12-23; Просмотров: 994; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.