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

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




































Главная

Программирование, компьютеры и кибернетика
Понятие ресурса. Примеры использования ресурсов

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


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.


Понятие ресурса. Редакторы и трансляторы ресурсов.
Самостоятельное изучение 32-х битного программирования на ассемблере и разработка выбранной темы по варианту.
В операционную систему Windows введено понятие ресурса. Ресурс представляет собой некий визуальный элемент с заданными свойствами, хранящийся в исполняемом файле отдельно от кода и данных, который может отображаться специальными функциями. Использование ресурсов дает две вполне определенные выгоды:
Ресурсы загружаются в память лишь при обращении к ним, тем самым достигается экономия памяти.
Свойства ресурсов поддерживаются системой автоматически, не требуя от программиста написания дополнительного кода.
Описание ресурсов хранится отдельно от программы в текстовом файле с расширением RC и компилируется (получается файл с расширением RES) специальным транслятором ресурсов. В исполняемый файл ресурсы включаются компоновщиком.
Транслятором ресурсов в пакете MASM32 является RC.EXE, в пакете TASM32 - BRCC32.EXE. В данном курсовом использовался пакет MASM32.
Могут быть описаны в самом файле ресурсов, либо храниться в отдельном файле *.ico. Рассмотрим последний случай. Вот файл ресурсов resu.rc:
Файл содержит две значимых строки. Одна строка определяет идентификатор иконки, вторая - ассоциирует идентификатор с файлом "ico01.ico". Оператор define является Си-оператором препроцессора.
Вот фрагмент программы для установки иконки, указанной в файле ресурсов:
INVOKE LoadIconA,[HINST],100; идентификатор иконки (см. файл *.rc)и идентификатор процесса
PUSH 1 00 ; идентификатор иконки (см. файл resu.rc)
PUSH [HINST] ; идентификатор процесса
Подход здесь полностью идентичен. Ниже файл ресурсов, где определен и курсор, и иконка.
А вот фрагмент программы, вызывающей иконку и курсор.
INVOKE LoadIconA,[HINST],100; идентификатор иконки (см. файл *.rc) и идентификатор процесса
Как и для иконки, программа brcc32.exe обрабатывает определение курсора в тексте файла ресурсов.
Здесь ситуация аналогична двум предыдущим. Вот пример файла ресурсов с битовой картинкой.
Для загрузки битовой картинки используется API-функция LoadBitmapА, которая имеет два параметра:
· идентификатор картинки из файла ресурсов (в нашем случае это значение IDI_BIT1, эквивалентное 500);
· дескриптор процесса (приложения).
Чтобы задать строку или несколько строк используется ключевое слово STRINGTABLE. Ниже представлен текст ресурса, задающий две строки. Для загрузки строки в программу используется функция LoadString (см. ниже). Строки, задаваемые в файле ресурсов, могут играть роль констант.
str 2,"ВЕРСИЯ 1.СОЗДАТЕЛЬ ПОЛТАНОВА ЕЛЕНА"
str 7,"ЭТОТ КУРСОР ЗАГРУЖЕН ИЗ ФАЙЛА РЕСУРСОВ"
str 8,"ВЫ УЖЕ ЗАГРУЗИЛИ БИТОВУЮ КАРТИНКУ"
Для загрузки строки в программу используется функция LoadString. С помощью нее строка загружается в буфер, после чего с ней можно работать, как с обычной строкой.
INVOKE LoadStringA, [HINST],1001,OFFSET BUF1,40; загрузитьстроку
INVOKE LoadStringA, [HINST],2000,OFFSET BUF2,40
INVOKE LoadStringA, [HINST],3000,OFFSET BUF3,40
INVOKE LoadStringA, [HINST],4000,OFFSET BUF4,40
INVOKE LoadStringA, [HINST],5000,OFFSET BUF5,40
INVOKE LoadStringA, [HINST],6000,OFFSET BUF6,40
INVOKE LoadStringA, [HINST],7000,OFFSET BUF10,40
INVOKE LoadStringA, [HINST],8000,OFFSET BUF7,40
Диалоговые окна являются наиболее сложными элементами ресурсов. В отличие от ресурсов, которые мы до сих пор рассматривали, для диалога не задается идентификатор. Обращение к диалогу происходит по его имени (строке).
#define WS_MINIMIZEBOX 0x00020000L
#define WS_MAXIMIZEBOX 0x00010000L
STYLE WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX
Определение диалога начинается со строки, содержащей ключевое слово DIALOG. В этой же строке далее указывается положение и размер диалогового окна. Далее идут строки, содержащие другие свойства окна. Наконец идут фигурные скобки. В данном случае они пусты. Это означает, что на окне нет никаких управляющих элементов. Тип окна, а также других элементов определяется константами, которые мы поместили в начале файла. Эти константы стандартны, и для языка Си хранятся в файле RESOURCE.H. Мы, как и раньше, все константы будем определять непосредственно в файле ресурсов. Обращаю ваше внимание, что константы определяются согласно нотации языка Си.
Диалоговое окно очень похоже на обычное окно. Так же как обычное окно, оно имеет свою процедуру. Процедура диалогового окна имеет те же параметры, что и процедура обычного окна. Сообщений, которые приходят на процедуру диалогового окна, гораздо меньше. Но те, которые у диалогового окна имеются, в основном совпадают с аналогичными сообщениями для обычного окна. Только вместо сообщения WM_CREATE приходит сообщение WM_INITDIALOG. Процедура диалогового окна может возвращать либо нулевое, либо ненулевое значение. Ненулевое значение должно возвращаться в том случае, если процедура обрабатывает (берет на себя обработку) данное сообщение, и ноль - если предоставляет обработку системе.
Отличия в поведении диалогового окна от обычного окна легко объяснить. Действительно, если Вы создаете обычное окно, то все его свойства определяются тремя факторами: свойствами класса, свойствами, определяемыми при создании окна, реакцией процедуры окна на определенные сообщения. При создании диалогового окна все свойства заданы в ресурсах. Часть этих свойств задается, когда при вызове функции создания диалогового окна (DialogBox, DialogBoxParam и др.) неявно вызывается функция CreateWindow. Остальная же часть свойств определяется поведением внутренней функции, которую создает система при создании диалогового окна. Если с диалоговым окном что-то происходит, то сообщение сначала приходит на внутреннюю процедуру, а затем вызывается процедура диалогового окна, которую мы создаем в программе. Если процедура возвращает 0, то внутренняя процедура продолжает обработку данного сообщения, если же возвращается ненулевое значение, внутренняя процедура не обрабатывает сообщение.
Меню также может быть задано в файле ресурсов. Как и диалоговое окно, в программе оно определяется по имени (строке). Меню можно задать и в обычном окне, и в диалоговом окне. Для обычного окна при регистрации класса следует просто заменить строку
MOV DWORD PTR [WC.CLMENNAME], OFFSET MENS
Здесь MENS - имя, под которым меню располагается в файле ресурсов. Меню на диалоговое окно устанавливается другим способом, который, разумеется, подходит и для обычного окна. В начале меню загружается при помощи функции LoadMenu, а затем устанавливается функцией SetMenu.
INVOKE LoadMenuA,[HINST],OFFSET PMENU;установить меню
INVOKE SetMenu,DWORD PTR [EBP+08H],EAX
ME NUITEM " Б&итовые картинки F7",7
MENUITEM "Диалоговые ок&на F 10",10
Пункты меню могут содержать дополнительные параметры, которые определяют дополнительные свойства этих пунктов.
Вот эти свойства, понимаемые компилятором ресурсов:
GRAYED - элемент недоступен (имеет серый цвет).
HELP - элемент может быть связан с помощью. Редакторы ресурсов дополнительно создают ресурс - строку. При этом идентификатор строки совпадает с идентификатором пункта меню.
MENUBARBREAK - для горизонтального пункта это означает, что начиная с него горизонтальные пункты располагаются в новой строке. Для вертикального пункта - то, что начиная с него пункты расположены в новом столбце. При этом проводится разделительная линия.
MENUBREAK - аналогично предыдущему, но разделительная линия не проводится.
INACTIVE - пункт не срабатывает. SEPARATOR - создает в меню разделитель. При этом идентификатор не ставится.
На первый взгляд этот вопрос достаточно прост, но, как станет ясно, он потянет за собой множество других. Акселератор позволяет выбирать пункт меню просто сочетанием клавиш.
Это очень удобно и быстро. Таблица акселераторов является ресурсом, имя которого должно совпадать с именем того меню (ресурса), пункты которого она определяет.
Вот пример такой таблицы. Определяется один акселератор на пункт меню MENUP, имеющий идентификаторы.
А вот общий вид таблицы акселераторов.
Клавиша 1, Идентификатор пункта меню (1) [,тип] [,параметр]
Клавиша 2, Идентификатор пункта меню (2) [,тип] [,параметр]
Клавиша 3, Идентификатор пункта меню (3) [,тип] [,параметр]
Клавиша N, Идентификатор пункта меню (N) [,тип] [,параметр]
Клавиша - это либо символ в кавычках, либо код ASCII символа, либо виртуальная клавиша. Если вначале стоит код символа, то тип задается как ASCII. Если используется виртуальная клавиша, то тип определяется как VIRTUAL.
Параметр может принимать одно из следующих значений: NOINVERT, ALT, CONTROL, SHIFT. Значение NOINVERT означает, что не подсвечивается выбранный при помощи акселератора пункт меню. Значения ALT, SHIFT, CONTROL означают, что, кроме клавиши, определенной в акселераторе, должна быть нажата одна из управляющих клавиш.
Для того чтобы акселераторы работали, необходимо выполнить два условия:
1. Должна быть загружена таблица акселераторов. Для этого используется функция LoadAccelerators.
2. Сообщения, пришедшие от акселератора, следует преобразовать в сообщение WM_COMMAND. Здесь нам пригодится функция TranslateAccelerator.
Остановимся подробнее на втором пункте. Функция TranslateAccelerator преобразует сообщения WM_KEYDOWN и WM_SYSKEYDOWN в сообщения WM_COMMAND и WM_SYSCOMMAND соответственно. При этом в старшем слове параметра WPARAM помещается 1, как отличие для акселератора. В младшем слове содержится идентификатор пункта меню.
Функция TranslateAccelerator возвращает ненулевое значение, если было произведено преобразование сообщения акселератора, в противном случае возвращается 0. Естественно включить вызов этой функции в кольцо сообщений. Вот этот фрагмент.
INVOKE GetMessageA,OFFSET MSG,0,0,0
; транслировать сообщение акселератора
INVOKE TranslateAcceleratorA,[NEWHWND], [ACC], OFFSET MSG
Функция TranslateAccelerator. Первым параметром этой функции идет дескриптор приложения, вторым параметром идет дескриптор таблицы акселераторов ([ACC]), получаемый при загрузке таблицы с помощью функции LoadAccelerators. Третий параметр - адрес, где содержится сообщение, полученное функцией GetMessage.
Каждое окно имеет также свою внутреннюю структуру CREATESTRUCT, которая заполняется во время создания окна с помощью функции CreateWindowExA
Это такие атрибуты окна, как его расположение и размеры, название, меню, отношения владения-подчинения с другими окнами, а также набор индивидуальных стилей, определяющих конкретный тип окна.
Рассмотрим функцию CreateWindowExA подробнее. Эта функция из модуля User32.dll принимает целых 12 параметров, которые должны быть размещены в стеке в следующем порядке:
· адрес переменной, в которой находится дополнительное значение для передачи некоторым типам окон. Если окну не требуется дополнительное значение, этот параметр равен нулю;
· описатель экземпляра приложения, которому принадлежит окно. Это значение может быть получено с помощью функции GetModuleHandleA из модуля Kernel32.dll;
· в зависимости от стиля окна, этот параметр является либо идентификатором дочернего окна, либо описателем меню. Если создаваемое окно - дочернее, это идентификатор окна; если нет - описатель меню окна (при отсутствии меню параметр равен нулю);
· описатель родительского окна или окна-владельца (если окно самостоятельное, параметр равен нулю);
· начальная вертикальная координата окна. Если окно дочернее, вертикальное положение отсчитывается от левого верхнего угла клиентской области родительского окна; если окно самостоятельное - от левого верхнего угла экрана;
· начальная горизонтальная координата окна. Аналогично вертикальной координате, за точку отсчета для дочерних окон принимается левый верхний угол клиентской области родительского окна, для самостоятельных окон - левый верхний угол экрана;
· адрес строки с именем класса окна;
· флаги, указывающие расширенный стиль окна.
При успешном создании окна в регистре EAX возвращается его описатель. Если произошла ошибка, EAX будет содержать 0. Постепенно мы разберем каждый параметр этой функции более подробно. Сейчас же попробуем создать приложение с использованием этой функции.
Функция ShowWindow устанавливает состояние показа определяемого окна.
int nCmdShow // состояние показа окна
Определяет, как окно должно быть показано. Этот параметр первоначально игнорируется, когда прикладная программа вызывает ShowWindow, если программа, которая запустила прикладную программу, обеспечивает структуру STARTUPINFO. Иначе, при первом вызове функции ShowWindow, это значение должно быть значением, полученным функцией WinMain в ее параметре nCmdShow. В последующих обращениях, этот параметр может быть одним из следующих значений:
SW_HIDE - Скрывает окно и активизирует другое окно.
SW_MAXIMIZE - Развертывает определяемое окно.
SW_MINIMIZE - Свертывает определяемое окно и активизирует следующее окно верхнего уровня в Z-последовательности.
SW_RESTORE - Активизирует и отображает окно. Если окно свернуто или развернуто, Windows восстанавливает в его первоначальных размерах и позиции. Прикладная программа должна установить этот флажок при восстановлении свернутого окна.
SW_SHOW - Активизирует окно и отображает его текущие размеры и позицию.
SW_SHOWDEFAULT - Устанавливает состояние показа, основанное на флажке SW_, определенном в структуре STARTUPINFO, переданной в функцию CreateProcess программой, которая запустила прикладную программу.
SW_SHOWMAXIMIZED - Активизирует окно и отображает его как развернутое окно.
SW_SHOWMINIMIZED - Активизирует окно и отображает его как свернутое окно.
SW_SHOWMINNOACTIVE - Отображает окно как свернутое окно. Активное окно остается активным.
SW_SHOWNA - Отображает окно в его текущем состоянии. Активное окно остается активным.
SW_SHOWNOACTIVATE - Отображает окно в его самом современном размере и позиции. Активное окно остается активным.
SW_SHOWNORMAL - Активизирует и отображает окно. Если окно свернуто или развернуто, Windows восстанавливает его в первоначальном размере и позиции. Прикладная программа должна установить этот флажок при отображении окна впервые.
Если функция завершилась успешно, возвращается значение отличное от нуля. Если функция потерпела неудачу, возвращаемое значение - ноль.
Функция UpdateWindow() обновляет клиентскую область указанного окна, посылая WM_PAINT сообщение к окну. Функция посылает WM_PAINT сообщение непосредственно процедуре указанного окна, обходя прикладную очередь.
Эта функция извлекает сообщение из очереди.
LPMSG lpMsg, // указатель на структуру
HWND hWnd, // указатель окна чьи сообщения нужно обрабатывать
UINT wMsgFilterMin, // номер мимимального сообщения для выборки
UINT wMsgFilterMax // номер максимального сообщения для выборки
Это сообщение посылается когда необходимо уничтожить окно. После удалении его с экрана. Посылается сообщение сначала главному окну, а потом дочерним окнам. После принятия этого сообщения необходимо вызывать функцию PostQuitMessage(). Сообщение о разрушении окна поступит именно оконной процедуре, а не в стандартной очереди сообщения. Общий вид обработки этого сообщения такой:
В ответ на это сообщение мы должны поместить в очередь сообщение WM_QUIT. Это и делает функция PostQuitMessage() посылая в очередь это сообщение и говоря, что процесс должен быть завершен.
Эта функция получает указатель на меню из файла ресурсов:
LPCTSTR lpMenuName // имя ресурса меню
Если результат работы функции неудачный, то вернется NULL. Давайте добавим поддержку меню к обычной программе на C, которую мы создавали в "Шаг 4 - Окно Windows на С". Для этого нам нужно добавить файл ресурсов и поместить в него меню.
Сообщение WM_COMMAND посылается когда:
· элемент управления посылает уведомительное сообщение родительскому окну
· происходит нажатие клавиши акселератора.
Обработка этого сообщения производится в главной функции окна.
Wparam - определяет источник сообщения: элемент управления или акселератор.
Lparam - идентификатор элемента, если это не акселератор.
После обработки этого сообщения необходимо вернуть 0.
Эта функция пересылает сообщение оконной процедуре.
CONST MSG *lpmsg // указатель на структуру с сообщением
Возвращаемое значение является тем, которое вернет оконная процедура. Но обычно это значение игнорируется. Откуда берется оконная процедура ??? Она есть в параметрах, то есть не сама процедура, а указатель на окно (HWND). Если указатель HWND_TOPMOST, то сообщение будет переслано всем окнам верхнего уровня. А если NULL, то вообще ничего не будет делаться. Эта функция нужна только один раз, даже если у вас в приложении много окон, она будет рассылать сообщения по окнам в соответствии со структурой MSG. Теперь мы можем нарисовать общую схему прохождения сообщений:
Итак, мы получаем сообщение. Проверяем не конец ли это работы, т.е. WM_QUIT. Если нет, то отдаем сообщение в TranslateMessage(), чтобы получить сообщения от клавиатуры более высокого уровня. После этого перенаправляем сообщение в оконную процедуру на основе HWND указанного в самом сообщении DispatchMessage. Цикл должен быть один для одного потока.
Функция LoadCursor загружает заданный ресурс курсора из (.EXE) файла выполняемой программы, связанной с экземпляром прикладной программы.
HINSTANCE hInstance, // дескриптор экземпляра приложения
LPCTSTR lpCursorName // идентификатор названия строки или ресурса курсора
Идентифицирует экземпляр модуля, исполняемый файл которого содержит курсор, который будет загружен.
Указывает на строку с символом нуля в конце, содержащую имя ресурса курсора, который будет загружен. Или же, этот параметр может состоять из идентификатора ресурса, в младшем слове и нуля в старшем слове. Может также использоваться макрокоманда MAKEINTRESOURCE, чтобы создать это значение.
Чтобы использовать предопределенный курсор Win32, прикладная программа должна установить параметр hInstance в значение ПУСТО (NULL), а параметр lpCursorName в одно из следующих значений:
IDC_APPSTARTING - Стандартная стрелка и маленькие песочные часы
IDC_IBEAM - I-прямая вертикальная линия для текста
IDC_ICON - Только для Windows NT: Пустая иконка
IDC_SIZE - Только для Windows NT: Четырех направленная стрелка
IDC_SIZENESW - Двунаправленная стрелка, указывающая северо-восток и юго-запад
IDC_SIZENS - Двунаправленная стрелка, указывающая север и юг
IDC_SIZENWSE - Двунаправленная стрелка, указывающая северо-запад и юго-восток
IDC_SIZEWE - Двунаправленная стрелка, указывающая запад и восток
Если функция завершается успешно, возвращаемое значение - дескриптор недавно загруженного курсора.
Если функция не выполняет задачу, возвращаемое значение ПУСТО (NULL). Чтобы получать расширенные данные об ошибках, вызовите GetLastError
LoadCursor загружает только ресурс курсора, если он не был загружен; иначе, функция извлекает дескриптор существующего ресурса. Эта функция возвращает допустимое значение дескриптора курсора только тогда, если параметр lpCursorName указывает на ресурс курсора. Если lpCursorName указывает на какой-либо тип ресурса отличающегося от курсора (например, пиктограммы), возвращаемое значение не ПУСТО (NULL), даже притом, что это не правильный дескриптор курсора.
Функция LoadCursor ищет ресурс курсора наиболее соответствующий курсору для текущего устройства отображения. Ресурс курсора может быть цветной или одноцветный точечный рисунок.
Функция LoadIcon загружает определяемый ресурс пиктограммы из исполняемого (.EXE) файла, связанного с экземпляром прикладной программы.
HINSTANCE hInstance, // дескриптор экземпляра приложения
LPCTSTR lpIconName // строка с именем или идентификатор ресурса пиктограммы
Идентифицирует экземпляр модуля, исполняемый файл которого содержит пиктограмму, которая будет загружена. Этот параметр должен иметь значение ПУСТО (NULL), когда загружается стандартная пиктограмма.
Указывает на строку с символом нуля в конце, которая содержит название ресурса пиктограммы, которая будет загружена. Альтернативно, этот параметр может содержать идентификатор ресурса в младшем слове и нули в старшем слове. Используйте макрокоманду MAKEINTRESOURCE, чтобы создать это значение.
Чтобы использовать одну из предопределенных пиктограмм Windows, установите параметр hInstance в значение ПУСТО (NULL), а параметр lpIconName в одно из следующих значений:
IDI_APPLICATION - Пиктограмма приложения по умолчанию.
IDI_ASTERISK - Звездочка (используется в информационных сообщениях).
IDI_EXCLAMATION - Восклицательный знак (используется в предупреждающих сообщениях).
IDI_HAND - Пиктограмма, имеющая форму руки (используется в серьезных предупреждающих сообщениях).
IDI_QUESTION - Вопросительный знак (используется в подсказках).
Если функция завершается успешно, величина возвращаемого значения - дескриптор недавно загруженной пиктограммы.
Если функция не выполняет задачу, величина возвращаемого значения - ПУСТО (NULL). Чтобы получать расширенные данные об ошибках, вызовите GetLastError.
LoadIcon загружает ресурс пиктограммы, только в том случае, если он не был загружен; иначе, функция получает дескриптор существующего ресурса. Функция ищет ресурс пиктограммы, которая наиболее соответствует для текущего дисплея. Ресурс пиктограммы может быть цветной или одноцветный точечный рисунок.
LoadIcon может загрузить только пиктограмму, размер которой соответствует метрическим значениям системы SM_CXICON и SM_CYICON. Используйте функцию LoadImage, чтобы загружать пиктограммы, которые другого размера.
Функция LoadAccelerators загружает заданную таблицу клавиш-ускорителей.
HINSTANCE hInstance, // дескриптор экземпляра приложения
LPCTSTR lpTableName // адрес строки с названием таблицы
Идентифицирует экземпляр модуля, чей исполняемый файл содержит таблицу клавиш-ускорителей для загрузки.
Указывает на строку с символом нуля в конце, которая именует таблицу клавиш-ускорителей для загрузки. Альтернативно, этот параметр может определять, что идентификатор ресурса таблицы клавиш-ускорителей в младшем слове и нуль в старшем слове. Может быть использована макрокоманда MAKEINTRESOURCE, чтобы создать это значение.
Если функция завершается успешно, величина возвращаемого значения - дескриптор загруженной таблицы клавиш-ускорителей.
Если функция не выполняет задачу, величина возвращаемого значения - ПУСТО (NULL).
Если таблица клавиш-ускорителей еще не была загружена, загружают ее из заданного исполняемого файла.
Таблицы клавиш-ускорителей, загруженные из ресурсов, освобождаются автоматически, когда прикладная программа заканчивает свою работу.
Функция ShowWindow устанавливает состояние показа определяемого окна.
int nCmdShow // состояние показа окна
Определяет, как окно должно быть показано. Этот параметр первоначально игнорируется, когда прикладная программа вызывает ShowWindow, если программа, которая запустила прикладную программу, обеспечивает структуру STARTUPINFO. Иначе, при первом вызове функции ShowWindow, это значение должно быть значением, полученным функцией WinMain в ее параметре nCmdShow. В последующих обращениях, этот параметр может быть одним из следующих значений:
SW_HIDE - Скрывает окно и активизирует другое окно.
SW_MAXIMIZE - Развертывает определяемое окно.
SW_MINIMIZE - Свертывает определяемое окно и активизирует следующее окно верхнего уровня в Z-последовательности.
SW_RESTORE - Активизирует и отображает окно. Если окно свернуто или развернуто, Windows восстанавливает в его первоначальных размерах и позиции. Прикладная программа должна установить этот флажок при восстановлении свернутого окна.
SW_SHOW - Активизирует окно и отображает его текущие размеры и позицию.
SW_SHOWDEFAULT - Устанавливает состояние показа, основанное на флажке SW_, определенном в структуре STARTUPINFO, переданной в функцию CreateProcess программой, которая запустила прикладную программу.
SW_SHOWMAXIMIZED - Активизирует окно и отображает его как развернутое окно.
SW_SHOWMINIMIZED - Активизирует окно и отображает его как свернутое окно.
SW_SHOWMINNOACTIVE - Отображает окно как свернутое окно. Активное окно остается активным.
SW_SHOWNA - Отображает окно в его текущем состоянии. Активное окно остается активным.
SW_SHOWNOACTIVATE - Отображает окно в его самом современном размере и позиции. Активное окно остается активным.
SW_SHOWNORMAL - Активизирует и отображает окно. Если окно свернуто или развернуто, Windows восстанавливает его в первоначальном размере и позиции. Прикладная программа должна установить этот флажок при отображении окна впервые.
Если функция завершилась успешно, возвращается значение отличное от нуля. Если функция потерпела неудачу, возвращаемое значение - ноль.
Прикладная программа посылает сообщение WM_SETICON, чтобы сопоставить новую большую или маленькую пиктограмму с окном. Windows выводит большую пиктограмму, когда окно свер-нуто (минимизировано) и маленькую пиктограмму в области заголовка окна.
wParam = (WPARAM) fType; // тип пиктограммы
lParam = (LPARAM) (HICON) hicon; // дескриптор пиктограммы
ICON_BIG Установку большой пиктограммы для окна.
ICON_SMALL Установку маленькой пиктограммы для окна.
Значение lParam. Идентифицирует новую большую или маленькую пиктограмму. Если этот параметр - ПУСТО (NULL), пиктограмма, обозначенная в параметре fType, удаляется.
Возвращаемое значение - дескриптор предыдущей большой или маленькой пиктограммы, в зависимости от значения fType. Оно - ПУСТО (NULL), если окно предварительно не имело никакой пиктограммы типа, обозначенного fType.
Функция DefWindowProc возвращает значение дескриптора предыдущей большой или маленькой пиктограммы, связанной с окном, в зависимости от значения fType.
Функция TranslateAccelerator обрабатывает клавиши - ускорители для команд меню. Функция транслирует сообщение WM_KEYDOWN или WM_SYSKEYDOWN в сообщение WM_COMMAND или WM_SYSCOMMAND (если имеется элемент для клавиши в заданной таблице клавиш-ускорителей), а затем передает сообщение WM_COMMAND или WM_SYSCOMMAND непосредственно соответствующей оконной процедуре. TranslateAccelerator не возвращает значения до тех пор, пока оконная процедура не обработает сообщение.
HWND hWnd, // дескриптор окна назначения
HACCEL hAccTable, // дескриптор таблицы клавиш-ускорителей
LPMSG lpMsg // адрес структуры с сообщением
Идентифицирует окно, сообщения которого должны быть оттранслированы.
Идентифицирует таблицу клавиш-ускорителей. Таблица должна быть загружена при помощи вызова функции LoadAccelerators или создана вызовом функции CreateAcceleratorTable.
Указывает на структуру MSG, которая содержит информацию сообщения, извлеченного из очереди сообщений вызывающего потока при помощи использования функции GetMessage или PeekMessage.
Если функция завершается успешно, величина возвращаемого значения - ИСТИНА (TRUE).
Если функция не выполняет задачу, величина возвращаемого значения - ЛОЖЬ(FALSE). Чтобы получить дополнительные данные об ошибках, вызовите GetLastError.
Чтобы отличить сообщение, которые эта функция посылает, от сообщений, отправленных меню или элементами управления, старшее слово параметра wParam сообщения WM_COMMAND или WM_SYSCOMMAND, содержит значение 1.
Комбинации клавиш - ускорителей, используемые для выбра пунктов из меню окна, транслируются в сообщение WM_SYSCOMMAND; все другие комбинации клавиш - ускорителей транслируются в сообщения WM_COMMAND.
Когда TranslateAccelerator возвращает значение отличное от нуля, а сообщение оттранслировано, прикладная программа не должна использовать функцию TranslateMessage для того, чтобы обработать сообщение снова.
Клавише - ускорителю не обязательно надо соответствовать команде меню.
Если команда клавиши - ускорителя соответствует пункту меню, прикладная программа посылает сообщения WM_INITMENU и WM_INITMENUPOPUP, как будто пользователь попытался показать меню. Однако, эти сообщения не посылаются, если встречается какое-либо из следующих условий:
Комбинация клавиши - ускорителя не соответствует элементу в меню окна и окно свернуто.
Фактически был произведен захват мыши. За информацией о захвате мыши, обратитесь в функцию SetCapture.
Если определяемое окно - активное окно, и никакое другое окно не имеет фокус клавиатуры (это обычно является случаем, если окно свернуто), TranslateAccelerator транслирует сообщения WM_SYSKEYUP и WM_SYSKEYDOWN вместо сообщений WM_KEYDOWN и WM_KEYUP.
Если происходит нажатие клавиши - ускорителя, которое соответствует пункту меню, когда окно, которое владеет меню, свернуто, TranslateAccelerator не отправляет сообщение WM_COMMAND. Однако, если происходит нажатие клавиши - ускорителя, которое не соответствует никакому из пунктов меню или меню окна, функция отправляет сообщение WM_COMMAND, даже если окно свернуто.
Сообщение WM_COMMAND отправляется тогда, когда пользователь выбирает командный элемент из меню, когда орган управления отправляет уведомительное сообщение в свое родительское окно, или когда транслируется нажатие клавиши - ускорителя.
wNotifyCode = HIWORD(wParam); // код уведомления
wID = LOWORD(wParam); // идентификатор элемента меню, управления или
hwndCtl = (HWND) lParam; // дескриптор элемента управления
Значение старшего слова wParam. Определяет код уведомления, если сообщение из органа управления. Если сообщение от клавиши - ускорителя, этот параметр равен 1. Если сообщение от меню, этот параметр - 0.
Значение младшего слова wParam. Определяет идентификатор пункта меню, органа управления или клавиши - ускорителя.
Значение lParam. Идентифицирует орган управления, отправляющий сообщение, если сообщение от элемента управления. Иначе, этот параметр имеет значение ПУСТО (NULL).
Понятие и классификация цифровых образовательных ресурсов, особенности создания и использования в учебном процессе. Технологии защиты информации от компьютерных вирусов. Создание цифрового ресурса средствами Microsoft Office SharePoint Designer 2007. курсовая работа [6,8 M], добавлен 25.06.2011
Обзор существующих технологий создания информационно-справочных ресурсов в Интернете. Языки программирования для создания Интернет-ресурсов. Разработка и тестирование информационно-справочного ресурса развлекательного комплекса. Расчет
Понятие ресурса. Примеры использования ресурсов курсовая работа. Программирование, компьютеры и кибернетика.
Курсовая работа по теме Кошки. Семейство кошачьих
Скачать Дмитрий Серебряков Собрание Сочинений
Курсовая работа по теме Решение проблем пациента по средствам сестринского ухода. Роль медицинского персонала в организации хранения и раздачи лекарственных средств в лечебном отделении
Реферат На Тему Державне Регулювання Ринкової Економіки
Реферат На Тему Русская Православная Церковь - История И Современность
Терпимость Очень Трудная Добродетель Сочинение
Дипломная работа по теме Исследование деятельности автопредприятия. Разработка и обоснование транспортного маршрута
Реферат по теме Буддизм в России
Курсовая работа: Роение пчел и ловля роёв
Реферат: Стиляги. Отважные денди Страны Советов
Курсовая работа по теме Методы получения заготовок в машиностроении
Курсовая Работа Основания Возникновения Обязательств
Дипломная работа по теме Использование информационных технологий в образовательном процессе
Реферат по теме Характеристика населения США. Традиции страны
Курсовая Работа На Тему Access
Ряд Динамики Реферат
Курсовая работа: Проектирование электрических сетей железных дорог. Скачать бесплатно и без регистрации
Реферат По Истории Титульный Лист Образец
Написать Кандидатскую Диссертацию Стоимость
Дипломная работа: Соціальний захист населення як складова соціальної політики держави
Микробиологическая лаборатория: устройство, оснащение, правила работы. Изучение микрофлоры бактерий - Медицина презентация
Морские экспедиции Англии в XVI – в первой трети XVII вв. - История и исторические личности дипломная работа
Історія прийняття Конституції України - История и исторические личности реферат


Report Page