Понятие ресурса. Примеры использования ресурсов
Изучение 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
Подобные документы
Понятие и классификация цифровых образовательных ресурсов, особенности создания и использования в учебном процессе. Технологии защиты информации от компьютерных вирусов. Создание цифрового ресурса средствами Microsoft Office SharePoint Designer 2007.
курсовая работа [6,8 M], добавлен 25.06.2011Обзор существующих технологий создания информационно-справочных ресурсов в Интернете. Языки программирования для создания Интернет-ресурсов. Разработка и тестирование информационно-справочного ресурса развлекательного комплекса. Расчет текущих затрат.
дипломная работа [8,6 M], добавлен 07.07.2012Психолого–педагогические особенности использования цифровых образовательных ресурсов в дифференцированном подходе. Уровневая дифференциация. Технология педагогического проектирования цифрового образовательного ресурса. Опытно-педагогическая работа.
дипломная работа [2,1 M], добавлен 01.04.2009Анализ существующих информационных ресурсов. Выбор программного обеспечения для создания информационного ресурса. Создание электронного ресурса для пансионата "Солнечный". Проверка работоспособности сайта: установленных модулей, ссылок и материалов.
дипломная работа [11,0 M], добавлен 16.08.2016Аппаратные характеристики системы, использованной для разработки информационного ресурса "Сортировка слиянием". Проектирование логической и физической структуры ресурса, реализация его интерфейса. Основные функции программы, ее тестирование и отладка.
курсовая работа [2,1 M], добавлен 26.11.2012Изучение информационных ресурсов: понятие, особенности создания и использования, роль в информатизации общества. Формирование формы калькуляции стоимости выпечных изделий, производимых хлебозаводом "Колобок", с помощью табличного процессора MS Excel.
курсовая работа [1,7 M], добавлен 25.04.2013Зависимость уровня эмоционального выгорания от стажа профессиональной деятельности. Анализ информационных ресурсов и сервисов. Программные средства для создания web-ресурса. Описание структуры web-ресурса. Определение уровня физиологического стресса.
дипломная работа [1,7 M], добавлен 20.12.2011Изучение модели операционной системы. Понятие и общая характеристика тупиков, алгоритм их обработки и предотвращения. Рассмотрение примеры графа распределения ресурсов с тупиком и с циклом без него. Правила восстановления ресурсов на выходе из системы.
презентация [1,3 M], добавлен 24.01.2014Таймер в Windows как устройство ввода информации, которое извещает приложение о том, что истек заданный интервал времени. Работа с таймером в условиях WinAPI, процесс 32-битного программирования на ассемблере под Windows. Результат выполнения программы.
курсовая работа [165,6 K], добавлен 18.05.2014Роль электронных образовательных ресурсов в управлении персоналом. Анализ работы отдела охраны труда и охраны окружающей среды в ИЯФ СО РАН. Разработка электронного образовательного ресурса для проведения инструктажа персонала по технике безопасности.
дипломная работа [2,7 M], добавлен 09.01.2014