Понятие ресурса. Примеры использования ресурсов

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.05.2014
Размер файла 719,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Оглавление

1. Вариант задания и цель работы

2. Введение

3. Используемые функции

CreateWindowExA

ShowWindow

UpdateWindow

GetMessage

WM_CLOSE

WM_DESTROY

PostQuitMessagе

LoadMenu

WM_COMMAND

DispatchMessage

LoadCursor

LoadIcon

LoadAccelerators

ShowWindow

WM_SETICON

TranslateAccelerator

WM_COMMAND

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

Вывод

1. Вариант задания и цель работы

Понятие ресурса. Редакторы и трансляторы ресурсов.

Примеры использования ресурсов.

Самостоятельное изучение 32-х битного программирования на ассемблере и разработка выбранной темы по варианту.

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

2. Введение

В операционную систему Windows введено понятие ресурса. Ресурс представляет собой некий визуальный элемент с заданными свойствами, хранящийся в исполняемом файле отдельно от кода и данных, который может отображаться специальными функциями. Использование ресурсов дает две вполне определенные выгоды:

Ресурсы загружаются в память лишь при обращении к ним, тем самым достигается экономия памяти.

Свойства ресурсов поддерживаются системой автоматически, не требуя от программиста написания дополнительного кода.

Описание ресурсов хранится отдельно от программы в текстовом файле с расширением RC и компилируется (получается файл с расширением RES) специальным транслятором ресурсов. В исполняемый файл ресурсы включаются компоновщиком.

Транслятором ресурсов в пакете MASM32 является RC.EXE, в пакете TASM32 - BRCC32.EXE. В данном курсовом использовался пакет MASM32.

Наиболее употребляемые ресурсы.

1. Иконки.

2. Курсоры.

3. Битовая картинка.

4. Строка.

5. Диалоговое окно.

6. Меню.

7. Акселераторы.

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

1. Иконки.

Могут быть описаны в самом файле ресурсов, либо храниться в отдельном файле *.ico. Рассмотрим последний случай. Вот файл ресурсов resu.rc:

#define IDI_ICON1 100

IDI_ICON1 ICON "ico01.ico"

Файл содержит две значимых строки. Одна строка определяет идентификатор иконки, вторая - ассоциирует идентификатор с файлом "ico01.ico". Оператор define является Си-оператором препроцессора.

Вот фрагмент программы для установки иконки, указанной в файле ресурсов:

INVOKE LoadIconA,[HINST],100; идентификатор иконки (см. файл *.rc)и идентификатор процесса

MOV [WC.CLSHICON],EAX

Без использования INVOKE:

PUSH 100 ; идентификатор иконки (см. файл resu.rc)

PUSH [HINST] ; идентификатор процесса

CALL LoadIconA

MOV [WC.CLSHICON], EAX

2. Курсоры

Подход здесь полностью идентичен. Ниже файл ресурсов, где определен и курсор, и иконка.

#define IDI_ICON1 1

#define IDI_CUR1 2

IDI_ICON1 ICON "Cdrom01.ico"

IDI_CUR1 CURSOR "4way01.cur"

А вот фрагмент программы, вызывающей иконку и курсор.

;иконка окна

INVOKE LoadIconA,[HINST],100; идентификатор иконки (см. файл *.rc) и идентификатор процесса

MOV [WC.CLSHICON],EAX

;курсор окна

INVOKE LoadCursorA,[HINST],202

MOV [WC.CLSHCURSOR],EAX

Без использования INVOKE:

;----------иконка окна

PUSH 1 ; идентификатор иконки

PUSH [HINST]

CALL LoadIconA@8

MOV [WC.CLSHICON], EAX

; ----------курсор окна

PUSH 2 ; идентификатор курсора

PUSH [HINST]

CALL LoadCursorA@8

MOV [WC.CLSHCURSOR], EAX

Как и для иконки, программа brcc32.exe обрабатывает определение курсора в тексте файла ресурсов.

3. Битовые картинки (*.BMP).

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

//битовая картинка

#defineIDI_BIT1 500

IDI_BIT1 BITMAP "bit.bmp"

Для загрузки битовой картинки используется API-функция LoadBitmapА, которая имеет два параметра:

· идентификатор картинки из файла ресурсов (в нашем случае это значение IDI_BIT1, эквивалентное 500);

· дескриптор процесса (приложения).

PUSH 500

PUSH [HINST]

CALL LoadBitmapA

MOV BTM,EAX

4. Строки.

Чтобы задать строку или несколько строк используется ключевое слово STRINGTABLE. Ниже представлен текст ресурса, задающий две строки. Для загрузки строки в программу используется функция LoadString (см. ниже). Строки, задаваемые в файле ресурсов, могут играть роль констант.

#define str1 1001

#define str2 2000

#define str3 3000

#define str4 4000

#define str5 5000

#define str6 6000

#define str7 7000

#define str8 8000

//определение строк

STRINGTABLE

{

str1,"ВЫХОДИЗПРОГРАММЫ"

str2,"ВЕРСИЯ 1.СОЗДАТЕЛЬ ПОЛТАНОВА ЕЛЕНА"

str3,"ВЫВОД СООБЩЕНИЯ"

str4,"АКСЕЛЕРАТОРЫ"

str5,"СТРОКИ"

str6,"ДИАЛОГОВЫЕ ОКНА"

str7,"ЭТОТ КУРСОР ЗАГРУЖЕН ИЗ ФАЙЛА РЕСУРСОВ"

str8,"ВЫ УЖЕ ЗАГРУЗИЛИ БИТОВУЮ КАРТИНКУ"

}

Для загрузки строки в программу используется функция 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

5. Диалоговые окна.

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

#define WS_CAPTION 0x00C00000L

#define WS_SYSMENU 0x00080000L

#define WS_MINIMIZEBOX 0x00020000L

#define WS_MAXIMIZEBOX 0x00010000L

DIAL1 DIALOG 0, 0, 240, 120

STYLE WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX

CAPTION "Пример диалогового окна"

FONT 8, "Arial"

{

}

Определение диалога начинается со строки, содержащей ключевое слово DIALOG. В этой же строке далее указывается положение и размер диалогового окна. Далее идут строки, содержащие другие свойства окна. Наконец идут фигурные скобки. В данном случае они пусты. Это означает, что на окне нет никаких управляющих элементов. Тип окна, а также других элементов определяется константами, которые мы поместили в начале файла. Эти константы стандартны, и для языка Си хранятся в файле RESOURCE.H. Мы, как и раньше, все константы будем определять непосредственно в файле ресурсов. Обращаю ваше внимание, что константы определяются согласно нотации языка Си.

Диалоговое окно очень похоже на обычное окно. Так же как обычное окно, оно имеет свою процедуру. Процедура диалогового окна имеет те же параметры, что и процедура обычного окна. Сообщений, которые приходят на процедуру диалогового окна, гораздо меньше. Но те, которые у диалогового окна имеются, в основном совпадают с аналогичными сообщениями для обычного окна. Только вместо сообщения WM_CREATE приходит сообщение WM_INITDIALOG. Процедура диалогового окна может возвращать либо нулевое, либо ненулевое значение. Ненулевое значение должно возвращаться в том случае, если процедура обрабатывает (берет на себя обработку) данное сообщение, и ноль - если предоставляет обработку системе.

Отличия в поведении диалогового окна от обычного окна легко объяснить. Действительно, если Вы создаете обычное окно, то все его свойства определяются тремя факторами: свойствами класса, свойствами, определяемыми при создании окна, реакцией процедуры окна на определенные сообщения. При создании диалогового окна все свойства заданы в ресурсах. Часть этих свойств задается, когда при вызове функции создания диалогового окна (DialogBox, DialogBoxParam и др.) неявно вызывается функция CreateWindow. Остальная же часть свойств определяется поведением внутренней функции, которую создает система при создании диалогового окна. Если с диалоговым окном что-то происходит, то сообщение сначала приходит на внутреннюю процедуру, а затем вызывается процедура диалогового окна, которую мы создаем в программе. Если процедура возвращает 0, то внутренняя процедура продолжает обработку данного сообщения, если же возвращается ненулевое значение, внутренняя процедура не обрабатывает сообщение.

6. Меню.

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

MOV DWORD PTR [WC.CLMENNAME],0

на

MOV DWORD PTR [WC.CLMENNAME], OFFSET MENS

Здесь MENS - имя, под которым меню располагается в файле ресурсов. Меню на диалоговое окно устанавливается другим способом, который, разумеется, подходит и для обычного окна. В начале меню загружается при помощи функции LoadMenu, а затем устанавливается функцией SetMenu.

загрузить меню

INVOKE LoadMenuA,[HINST],OFFSET PMENU;установить меню

INVOKE SetMenu,DWORD PTR [EBP+08H],EAX

Меню в файле ресурсов:

MENUP MENU

{

POPUP "&Иконки и курсоры"

{

MENUITEM SEPARATOR

POPUP "И&конки "

{

MENUITEM "Ик&онка 1 F1",1

MENUITEM "Ико&нка 2 F2",2

MENUITEM "Икон&ка 3 F3",3

}

MENUITEM "К&урсоры F4",4

}

POPUP "&Еще ресурсы"

{

MENUITEM " Б&итовые картинки F7",7

MENUITEM "Акселе&раторы F8",8

MENUITEM "Стро&ки F9",9

MENUITEM "Диалоговые ок&на F10",10

}

MENUITEM "Выход F11",11

}

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

Вот эти свойства, понимаемые компилятором ресурсов:

CHECKED - пункт отмечен "птичкой".

GRAYED - элемент недоступен (имеет серый цвет).

HELP - элемент может быть связан с помощью. Редакторы ресурсов дополнительно создают ресурс - строку. При этом идентификатор строки совпадает с идентификатором пункта меню.

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

MENUBREAK - аналогично предыдущему, но разделительная линия не проводится.

INACTIVE - пункт не срабатывает.
SEPARATOR - создает в меню разделитель. При этом идентификатор не ставится.

7. Акселераторы.

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

Это очень удобно и быстро. Таблица акселераторов является ресурсом, имя которого должно совпадать с именем того меню (ресурса), пункты которого она определяет.

Вот пример такой таблицы. Определяется один акселератор на пункт меню MENUP, имеющий идентификаторы.

#define VK_F1 0x70

#define VK_F2 0x71

#define VK_F3 0x72

#define VK_F4 0x73

#define VK_F5 0x74

#define VK_F6 0x75

#define VK_F7 0x76

#define VK_F8 0x77

#define VK_F9 0x78

#define VK_F10 0x79

#define VK_F11 0x7A

MENUP ACCELERATORS

{

VK_F1, 1, VIRTKEY

VK_F2, 2, VIRTKEY

VK_F3, 3, VIRTKEY

VK_F4, 4, VIRTKEY

VK_F5, 5, VIRTKEY

VK_F6, 6, VIRTKEY

VK_F7, 7, VIRTKEY

VK_F8, 8, VIRTKEY

VK_F9, 9, VIRTKEY

VK_F10,10, VIRTKEY

VK_F11, 11, VIRTKEY

}

А вот общий вид таблицы акселераторов.

Имя ACCELERATORS

{

Клавиша 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. Естественно включить вызов этой функции в кольцо сообщений. Вот этот фрагмент.

MSG_LOOP:

INVOKE GetMessageA,OFFSET MSG,0,0,0

CMP EAX, 0

JE END_LOOP

; транслировать сообщение акселератора

INVOKE TranslateAcceleratorA,[NEWHWND], [ACC], OFFSET MSG

CMP EAX,0

JNE MSG_LOOP

INVOKE TranslateMessage,OFFSET MSG

INVOKE DispatchMessageA,OFFSET MSG

JMP MSG_LOOP

END_LOOP:

Функция TranslateAccelerator. Первым параметром этой функции идет дескриптор приложения, вторым параметром идет дескриптор таблицы акселераторов ([ACC]), получаемый при загрузке таблицы с помощью функции LoadAccelerators. Третий параметр - адрес, где содержится сообщение, полученное функцией GetMessage.

3. Используемые функции

CreateWindowExA.

Каждое окно имеет также свою внутреннюю структуру CREATESTRUCT, которая заполняется во время создания окна с помощью функции CreateWindowExA

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

Рассмотрим функцию CreateWindowExA подробнее. Эта функция из модуля User32.dll принимает целых 12 параметров, которые должны быть размещены в стеке в следующем порядке:

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

· описатель экземпляра приложения, которому принадлежит окно. Это значение может быть получено с помощью функции GetModuleHandleA из модуля Kernel32.dll;

· в зависимости от стиля окна, этот параметр является либо идентификатором дочернего окна, либо описателем меню. Если создаваемое окно - дочернее, это идентификатор окна; если нет - описатель меню окна (при отсутствии меню параметр равен нулю);

· описатель родительского окна или окна-владельца (если окно самостоятельное, параметр равен нулю);

· высота окна в пикселах;

· ширина окна в пикселах;

· начальная вертикальная координата окна. Если окно дочернее, вертикальное положение отсчитывается от левого верхнего угла клиентской области родительского окна; если окно самостоятельное - от левого верхнего угла экрана;

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

· флаги, указывающие стиль окна;

· адрес строки с именем окна;

· адрес строки с именем класса окна;

· флаги, указывающие расширенный стиль окна.

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

ShowWindow

Функция ShowWindow устанавливает состояние показа определяемого окна.

BOOL ShowWindow

(

HWND hWnd, // дескриптор окна

int nCmdShow // состояние показа окна

);

Параметры hWnd

Идентифицирует окно.

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

Функция UpdateWindow() обновляет клиентскую область указанного окна, посылая WM_PAINT сообщение к окну. Функция посылает WM_PAINT сообщение непосредственно процедуре указанного окна, обходя прикладную очередь.

BOOL UpdateWindow

(

HWND hWnd // указатель на окно

);

GetMessage

Эта функция извлекает сообщение из очереди.

BOOL GetMessage

(

LPMSG lpMsg, // указатель на структуру

HWND hWnd, // указатель окна чьи сообщения нужно обрабатывать

UINT wMsgFilterMin, // номер мимимального сообщения для выборки

UINT wMsgFilterMax // номер максимального сообщения для выборки

);

С помощью переменной hWnd есть возможность указать конкретное окно, от которого будет принято сообщение. Если установить это значение в NULL, то будут приниматься все сообщения. Возврат этой функции будет отличен от нуля пока не будет получено сообщение WM_QUIT.

WM_CLOSE

Это сообщение посылается когда окно должно быть закрыто. Это сообщение не имеет параметров. Использование этого сообщения:

case WM_CLOSE:

DestroyWindow(hwndMain);

break;

WM_DESTROY

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

case WM_DESTROY:

PostQuitMessage( 0 );

break;

В ответ на это сообщение мы должны поместить в очередь сообщение WM_QUIT. Это и делает функция PostQuitMessage() посылая в очередь это сообщение и говоря, что процесс должен быть завершен.

PostQuitMessagе

VOID PostQuitMessage

(

int nExitCode // кодвозврата

);

LoadMenu

Эта функция получает указатель на меню из файла ресурсов:

HMENU LoadMenu

(

HINSTANCE hInstance, // модуль

LPCTSTR lpMenuName // имя ресурса меню

);

Если результат работы функции неудачный, то вернется NULL. Давайте добавим поддержку меню к обычной программе на C, которую мы создавали в "Шаг 4 - Окно Windows на С". Для этого нам нужно добавить файл ресурсов и поместить в него меню.

WM_COMMAND

Сообщение WM_COMMAND посылается когда:

· производится выбор пункта меню

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

· происходит нажатие клавиши акселератора.

Обработка этого сообщения производится в главной функции окна.

Wparam - определяет источник сообщения: элемент управления или акселератор.

Lparam - идентификатор элемента, если это не акселератор.

После обработки этого сообщения необходимо вернуть 0.

Эта функция пересылает сообщение оконной процедуре.

DispatchMessage

LRESULT DispatchMessage

(

CONST MSG *lpmsg // указатель на структуру с сообщением

);

Возвращаемое значение является тем, которое вернет оконная процедура. Но обычно это значение игнорируется. Откуда берется оконная процедура ??? Она есть в параметрах, то есть не сама процедура, а указатель на окно (HWND). Если указатель HWND_TOPMOST, то сообщение будет переслано всем окнам верхнего уровня. А если NULL, то вообще ничего не будет делаться. Эта функция нужна только один раз, даже если у вас в приложении много окон, она будет рассылать сообщения по окнам в соответствии со структурой MSG. Теперь мы можем нарисовать общую схему прохождения сообщений:

Итак, мы получаем сообщение. Проверяем не конец ли это работы, т.е. WM_QUIT. Если нет, то отдаем сообщение в TranslateMessage(), чтобы получить сообщения от клавиатуры более высокого уровня. После этого перенаправляем сообщение в оконную процедуру на основе HWND указанного в самом сообщении DispatchMessage. Цикл должен быть один для одного потока.

LoadCursor

Функция LoadCursor загружает заданный ресурс курсора из (.EXE) файла выполняемой программы, связанной с экземпляром прикладной программы.

Синтаксис

HCURSOR LoadCursor

(

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

LPCTSTR lpCursorName // идентификатор названия строки или ресурса курсора

);

Параметры

hInstance

Идентифицирует экземпляр модуля, исполняемый файл которого содержит курсор, который будет загружен.

lpCursorName

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

Чтобы использовать предопределенный курсор Win32, прикладная программа должна установить параметр hInstance в значение ПУСТО (NULL), а параметр lpCursorName в одно из следующих значений:

IDC_APPSTARTING - Стандартная стрелка и маленькие песочные часы

IDC_ARROW - Стандартная стрелка

IDC_CROSS - Перекрестие

IDC_IBEAM - I-прямая вертикальная линия для текста

IDC_ICON - Только для Windows NT: Пустая иконка

IDC_NO - Перечеркнутый круг

IDC_SIZE - Только для Windows NT: Четырех направленная стрелка

IDC_SIZEALL - Подобно IDC_SIZE

IDC_SIZENESW - Двунаправленная стрелка, указывающая северо-восток и юго-запад

IDC_SIZENS - Двунаправленная стрелка, указывающая север и юг

IDC_SIZENWSE - Двунаправленная стрелка, указывающая северо-запад и юго-восток

IDC_SIZEWE - Двунаправленная стрелка, указывающая запад и восток

IDC_UPARROW - Вертикальная стрелка

IDC_WAIT - Песочные часы

Возвращаемые значения

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

Если функция не выполняет задачу, возвращаемое значение ПУСТО (NULL). Чтобы получать расширенные данные об ошибках, вызовите GetLastError

Замечания

LoadCursor загружает только ресурс курсора, если он не был загружен; иначе, функция извлекает дескриптор существующего ресурса. Эта функция возвращает допустимое значение дескриптора курсора только тогда, если параметр lpCursorName указывает на ресурс курсора. Если lpCursorName указывает на какой-либо тип ресурса отличающегося от курсора (например, пиктограммы), возвращаемое значение не ПУСТО (NULL), даже притом, что это не правильный дескриптор курсора.

Функция LoadCursor ищет ресурс курсора наиболее соответствующий курсору для текущего устройства отображения. Ресурс курсора может быть цветной или одноцветный точечный рисунок.

Функция LoadIcon загружает определяемый ресурс пиктограммы из исполняемого (.EXE) файла, связанного с экземпляром прикладной программы.

LoadIcon

Синтаксис

HICON LoadIcon

(

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

LPCTSTR lpIconName // строка с именем или идентификатор ресурса пиктограммы

);

Параметры

hInstance

Идентифицирует экземпляр модуля, исполняемый файл которого содержит пиктограмму, которая будет загружена. Этот параметр должен иметь значение ПУСТО (NULL), когда загружается стандартная пиктограмма.

lpIconName

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

Чтобы использовать одну из предопределенных пиктограмм Windows, установите параметр hInstance в значение ПУСТО (NULL), а параметр lpIconName в одно из следующих значений:

IDI_APPLICATION - Пиктограмма приложения по умолчанию.

IDI_ASTERISK - Звездочка (используется в информационных сообщениях).

IDI_EXCLAMATION - Восклицательный знак (используется в предупреждающих сообщениях).

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

IDI_QUESTION - Вопросительный знак (используется в подсказках).

IDI_WINLOGO - Логотип Windows.

Возвращаемые значения

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

Если функция не выполняет задачу, величина возвращаемого значения - ПУСТО (NULL). Чтобы получать расширенные данные об ошибках, вызовите GetLastError.

Замечания

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

LoadIcon может загрузить только пиктограмму, размер которой соответствует метрическим значениям системы SM_CXICON и SM_CYICON. Используйте функцию LoadImage, чтобы загружать пиктограммы, которые другого размера.

LoadAccelerators

Функция LoadAccelerators загружает заданную таблицу клавиш-ускорителей.

Синтаксис

HACCEL LoadAccelerators

(

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

LPCTSTR lpTableName // адрес строки с названием таблицы

);

Параметры

hInstance

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

lpTableName

Указывает на строку с символом нуля в конце, которая именует таблицу клавиш-ускорителей для загрузки. Альтернативно, этот параметр может определять, что идентификатор ресурса таблицы клавиш-ускорителей в младшем слове и нуль в старшем слове. Может быть использована макрокоманда MAKEINTRESOURCE, чтобы создать это значение.

Возвращаемые значения

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

Если функция не выполняет задачу, величина возвращаемого значения - ПУСТО (NULL).

Замечания

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

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

ShowWindow

Функция ShowWindow устанавливает состояние показа определяемого окна.

Синтаксис

BOOL ShowWindow

(

HWND hWnd, // дескриптор окна

int nCmdShow // состояние показа окна

);

Параметры hWnd

Идентифицирует окно.

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

Прикладная программа посылает сообщение WM_SETICON, чтобы сопоставить новую большую или маленькую пиктограмму с окном. Windows выводит большую пиктограмму, когда окно свер-нуто (минимизировано) и маленькую пиктограмму в области заголовка окна.

Синтаксис

WM_SETICON

wParam = (WPARAM) fType; // тип пиктограммы

lParam = (LPARAM) (HICON) hicon; // дескриптор пиктограммы

Параметры fType

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

Значение Что оно означает

ICON_BIG Установку большой пиктограммы для окна.

ICON_SMALL Установку маленькой пиктограммы для окна.

hicon

Значение lParam. Идентифицирует новую большую или маленькую пиктограмму. Если этот параметр - ПУСТО (NULL), пиктограмма, обозначенная в параметре fType, удаляется.

Возвращаемые значения

Возвращаемое значение - дескриптор предыдущей большой или маленькой пиктограммы, в зависимости от значения fType. Оно - ПУСТО (NULL), если окно предварительно не имело никакой пиктограммы типа, обозначенного fType.

Действия по умолчанию

Функция DefWindowProc возвращает значение дескриптора предыдущей большой или маленькой пиктограммы, связанной с окном, в зависимости от значения fType.

TranslateAccelerator

Функция TranslateAccelerator обрабатывает клавиши - ускорители для команд меню. Функция транслирует сообщение WM_KEYDOWN или WM_SYSKEYDOWN в сообщение WM_COMMAND или WM_SYSCOMMAND (если имеется элемент для клавиши в заданной таблице клавиш-ускорителей), а затем передает сообщение WM_COMMAND или WM_SYSCOMMAND непосредственно соответствующей оконной процедуре. TranslateAccelerator не возвращает значения до тех пор, пока оконная процедура не обработает сообщение.

Синтаксис

int TranslateAccelerator

(

HWND hWnd, // дескриптор окна назначения

HACCEL hAccTable, // дескриптор таблицы клавиш-ускорителей

LPMSG lpMsg // адрес структуры с сообщением

);

Параметры

hWnd

Идентифицирует окно, сообщения которого должны быть оттранслированы.

hAccTable

Идентифицирует таблицу клавиш-ускорителей. Таблица должна быть загружена при помощи вызова функции LoadAccelerators или создана вызовом функции CreateAcceleratorTable.

lpMsg

Указывает на структуру 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

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

Синтаксис

WM_COMMAND

wNotifyCode = HIWORD(wParam); // код уведомления

wID = LOWORD(wParam); // идентификатор элемента меню, управления или

// клавиши ускорителя

hwndCtl = (HWND) lParam; // дескриптор элемента управления

Параметры

wNotifyCode

Значение старшего слова wParam. Определяет код уведомления, если сообщение из органа управления. Если сообщение от клавиши - ускорителя, этот параметр равен 1. Если сообщение от меню, этот параметр - 0.

wID

Значение младшего слова wParam. Определяет идентификатор пункта меню, органа управления или клавиши - ускорителя.

hwndCtl

Значение lParam. Идентифицирует орган управления, отправляющий сообщение, если сообщение от элемента управления. Иначе, этот параметр имеет значение ПУСТО (NULL).

Возвращаемые значения

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

;файл menu1.asm

.386P

.MODEL FLAT, stdcall ; определяем, что у нас сплошная("плоская") модель памяти,а stdcall говорит, что нужно уровнять стэк, после того как ф-ия будет прервана

;==========================

include menu1.inc

includelib p:\masm32\lib\user32.lib ;директивы компоновщику для подключения библиотек

includelib p:\masm32\lib\kernel32.lib

includelib p:\masm32\lib\gdi32.lib

;==========================

_DATA SEGMENT DWORD PUBLIC USE32 'DATA'; сегментданных

NEWHWND DD 0

MSG MSGSTRUCT <?>

WC WNDCLASS <?>

PNT PAINTSTR <?>

HINST DD 0 ; дескрипторприложения

TITLENAME DB 'Курсовая работа Полтановой Елены',0

NAM DB 'CLASS32',0

HDC DWORD ?

MEMDC DWORD ?

HOLD DWORD ?

BTM DWORD 0 ;дескрипторкартинки

XT DD 30

YT DD 30

PMENU DB "MENUP",0

BUF1 DB 40 dup(0)

BUF2 DB 40 dup(0)

BUF3 DB 40 dup(0)

BUF4 DB 40 dup(0)

BUF5 DB 40 dup(0)

BUF6 DB 40 dup(0)

BUF7 DB 40 dup(0)

BUF10 DB 40 dup(0)

ACC DWORD ?

_DATA ENDS

;=============================

_TEXT SEGMENT DWORD PUBLIC USE32 'CODE' ; сегменткода

START:

INVOKEGetModuleHandleA,0; получить дескриптор приложения

MOV [HINST], EAX

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

; загрузитьакселераторы

INVOKE LoadAcceleratorsA, [HINST], OFFSET PMENU

MOV ACC, EAX ; запомнить дескриптор таблицы

;========================================

REG_CLASS:

;заполнить структуру окна

;стиль

;Стиль.

MOV [WC.CLSSTYLE],stylcl

MOV [WC.CLSLPFNWNDPROC],OFFSET WNDPROC ;Процедура обработки сообщений.

MOV [WC.CLSCBCLSEXTRA], 0

MOV [WC.CLSCBWNDEXTRA], 0

MOV EAX, [HINST]

MOV [WC.CLSHINSTANCE], EAX

;иконка окна

INVOKE LoadIconA,[HINST],100; идентификатор иконки (см. файл *.rc) и идентификатор процесса

MOV [WC.CLSHICON],EAX

;курсор окна

INVOKE LoadCursorA,[HINST],202

MOV [WC.CLSHCURSOR],EAX

;битовая картинка

PUSH 500

PUSH [HINST]

CALL LoadBitmapA

MOV BTM,EAX

;====================================

MOV [WC.CLSHBRBACKGROUND],17

MOV DWORD PTR [WC.MENNAME],0

MOV DWORD PTR [WC.CLSNAME],OFFSET NAM

INVOKE RegisterClassA, OFFSET WC

;создать окно зарегестрированного класса

;DY0 высота окна

;DX0 ширина окна

;100 координата y

;100 координата x

;TITLENAME имя окна

;NAMимякласса

INVOKE CreateWindowExA,0,OFFSET NAM, OFFSET TITLENAME,WS_OVERLAPPEDWINDOW,100,100,DX0,DY0,0,0,[HINST],0

;проверка на ошибку

CMP EAX,0

JZ _ERR

MOV [NEWHWND],EAX;дескриптор окна

INVOKE ShowWindow,[NEWHWND],SW_SHOWNORMAL;показать созданное окно

INVOKE UpdateWindow,[NEWHWND]; перерисовать видимую часть окна

;================================

; кольцо обработки сообщений

MSG_LOOP:

INVOKE GetMessageA,OFFSET MSG,0,0,0

CMP EAX, 0

JE END_LOOP

; транслировать сообщение акселератора

INVOKE TranslateAcceleratorA,[NEWHWND], [ACC], OFFSET MSG

CMP EAX,0

JNE MSG_LOOP

INVOKE TranslateMessage,OFFSET MSG

INVOKE DispatchMessageA,OFFSET MSG

JMP MSG_LOOP

END_LOOP:

;выход из программы(закрыть процесс)

INVOKE ExitProcess,[MSG.MSWPARAM]

_ERR:

JMP END_LOOP

;==================================

; процедура окна

; расположение параметров в стеке

; [EBP+014Н] LPARAM

; [EBP+10H] WAPARAM

; [EBP+0CH] MES

; [EBP+8] HWND

;==================================

WNDPROC PROC

PUSH EBP

MOV EBP,ESP

PUSH EBX

PUSH ESI

PUSH EDI

CMP DWORD PTR [EBP+0CH],WM_DESTROY

JE WMDESTROY

CMP DWORD PTR [EBP+0CH],WM_CREATE

JE WMCREATE

CMP DWORD PTR [EBP+0CH],WM_COMMAND

JE WMCOMMAND

CMP DWORD PTR [EBP+0CH],WM_PAINT

JE WMPAINT

JMP DEFWNDPROC

;=================================

WMPAINT:

INVOKE BeginPaint, DWORD PTR [EBP+08H],OFFSET PNT

MOV HDC,EAX

INVOKE CreateCompatibleDC,HDC

MOV MEMDC,EAX

INVOKE SelectObject,MEMDC,BTM

INVOKE BitBLt,HDC,20,20,400,600,MEMDC,0,0,0CC0020h

INVOKE DeleteDC,MEMDC

INVOKE EndPaint,DWORD PTR [EBP+08H],OFFSET PNT

MOV EAX,0

JMP FINISH

;======================================

WMCREATE:

;загрузитьменю

INVOKE LoadMenuA,[HINST],OFFSET PMENU;установитьменю

INVOKE SetMenu,DWORD PTR [EBP+08H],EAX

MOV EAX, 0

JMP FINISH

;========================================

WMCOMMAND:

;здесь определяем идентификатор, в данном случае это

;это идентификатор пункта меню сообщение

;иконка 1

L7:

CMP WORD PTR [EBP+10H],1

JNE L8

;загрузитьиконку

INVOKE LoadIconA,[HINST],100

; установитьиконку

INVOKE SendMessageA,DWORD PTR [EBP+08H],WM_SETICON,0,EAX

JMP FINISH

;иконка 2

L8:

CMP WORD PTR [EBP+10H],2

JNE L9

;загрузитьиконку

INVOKE LoadIconA,[HINST],101

; установитьиконку

INVOKE SendMessageA,DWORD PTR [EBP+08H],WM_SETICON,0,EAX

JMP FINISH

;иконка 3

L9:

CMP WORD PTR [EBP+10H],3

JNE L10

;загрузитьиконку

INVOKE LoadIconA,[HINST],102

; установитьиконку

INVOKE SendMessageA,DWORD PTR [EBP+08H],WM_SETICON,0,EAX

JMP FINISH

;курсор 1

L10:

CMP WORD PTR [EBP+10H],4

JNE L11

INVOKE MessageBoxA,0,OFFSET BUF10,OFFSET BUF3,0

JMP FINISH

;битовая картинка

L11:

CMP WORD PTR [EBP+10H],7

JNE L14

;вывод сообщения о том что загружена картинка

INVOKE MessageBoxA,0,OFFSET BUF7,OFFSET BUF3,0

JMP FINISH

L14:

CMP WORD PTR [EBP+10H], 8

JNE L15

INVOKE MessageBoxA,0,OFFSET BUF4,OFFSET BUF3,0

JMP FINISH

L15:

CMP WORD PTR [EBP+10H], 9

JNE L16

INVOKE MessageBoxA,0,OFFSET BUF5,OFFSET BUF3,0

JMP FINISH

L16:

CMP WORD PTR [EBP+10H], 10

JNE L4

INVOKE MessageBoxA,0,OFFSET BUF6,OFFSET BUF3,0

JMP FINISH

L4:

CMP WORD PTR [EBP+10H],11

JNE FINISH

INVOKE MessageBoxA,0,OFFSET BUF1,OFFSET BUF3,0

JMP WMDESTROY

MOV EAX,0

JMP FINISH

;==================================

DEFWNDPROC:

INVOKE DefWindowProcA,DWORD PTR [EBP+08H],DWORD PTR [EBP+0CH],DWORD PTR [EBP+10H],DWORD PTR [EBP +14H]

JMP FINISH

;=================================

WMDESTROY:

INVOKE PostQuitMessage,0

MOV EAX,0

;==================================

FINISH:

POP EDI

POP ESI

POP EBX

POP EBP

RET 16

WNDPROC ENDP

_TEXT ENDS

END START

; файл menu1.inc

; константы

; сообщение приходит при закрытии окна

WM_CLOSEequ 10h;сообщение приходит при закрытии окна

WM_SETICON equ 80h

WM_COMMAND equ 111h

WM_SETCURSOR equ 20h

WM_DESTROY equ 2;сообщение при закрытии окна

WM_CREATEequ 1;сообщение при создании окна

WM_PAINTequ 0Fh;при перерисовке окна

;свойства окна

CS_VREDRAWequ 1h

CS_HREDRAW equ 2h

CS_GLOBALCLASS equ 4000h

WS_OVERLAPPEDWINDOW equ 000CF0000H

stylcl equ CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLASS

DX0 equ 600

DY0 equ 400

;компоненты цветов

RGBW equ (50 or (50 shl 8)) or (255 shl 16) ;цвет окна

RGBRequ 150;цвет региона

RGBLequ 0;цвет линии

RGBPequ 255 or (100 shl 8) ;цвет точки

;режим показа окна - нормальный

SW_SHOWNORMALequ 1

; прототипы внешних процедур

CreateWindowExA PROTO : DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD

DefWindowProcA PROTO: DWORD,:DWORD,:DWORD,:DWORD

ShowWindow PROTO: DWORD, :DWORD

MessageBoxA PROTO:DWORD,:DWORD,:DWORD,:DWORD

ExitProcess PROTO:DWORD

GetModuleHandleA PROTO:DWORD

LoadStringA PROTO:DWORD,:DWORD,:DWORD,:DWORD

LoadIconA PROTO:DWORD,:DWORD

LoadMenuA PROTO:DWORD,:DWORD

LoadCursorA PROTO:DWORD,:DWORD

LoadBitmapA PROTO :DWORD,:DWORD

RegisterClassA PROTO:DWORD

SendMessageA PROTO:DWORD,:DWORD,:DWORD,:DWORD

SetMenu PROTO:DWORD,:DWORD

LoadAcceleratorsA PROTO:DWORD,:DWORD

TranslateAcceleratorA PROTO:DWORD,:DWORD,:DWORD

GetMessageA PROTO:DWORD,:DWORD,:DWORD,:DWORD

DispatchMessageA PROTO:DWORD

PostQuitMessage PROTO:DWORD

BeginPaint PROTO:DWORD,:DWORD

EndPaint PROTO :DWORD,:DWORD

CreateCompatibleDC PROTO:DWORD

SelectObject PROTO:DWORD,:DWORD

BitBlt PROTO:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD

DeleteDC PROTO:DWORD

CreateDialogParamA PROTO:DWORD,:DWORD,:DWORD,:DWORD,:DWORD

DestroyWindow PROTO:DWORD

TranslateMessage PROTO:DWORD

UpdateWindow PROTO :DWORD

WNDPROC PROTO

; структуры

; структура сообщения

MSGSTRUCTSTRUC

MSHWNDDD ? ;Идентификатор окна, получающего сообщение.

MSMESSAGEDD ? ;Идентификатор сообщения.

MSWPARAMDD ? ;Доп. информация о сообщении.

MSLPARAMDD ? ;Доп. информация о сообщении.

MSTIMEDD ? ;Время посылки сообщения.

MSPTDD ? ;Положение курсора во время посылки сообщения.

MSGSTRUCT ENDS

WNDCLASS STRUC

CLSSTYLE DD ?;Стиль окна.

CLSLPFNWNDPROCDD ? ;Указатель на процедуру окна.

CLSCBCLSEXTRADD ? ;Информация о доп. байтах для данной структуры.

CLSCBWNDEXTRADD ? ;Информация о доп. байтах для окна.

CLSHINSTANCE DD ?;Дескриптор приложения.

CLSHICON DD ?;Идентификатор иконки окна.

CLSHCURSORDD ? ;Идентификатор курсора окна.

CLSHBRBACKGROUNDDD ? ;Идентификатор кисти окна.

MENNAMEDD ? ;Имя-идентификатор меню.

CLSNAMEDD ? ;Специфицирует имя класса окон.

WNDCLASS ENDS

PAINTSTR STRUC

hdc DWORD 0

fErase DWORD 0

Left DWORD 0

top DWORD 0

right DWORD 0

bottom DWORD 0


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.