Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Создать меню без файла описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Рис1. Вікно программы Заключение Моя завдання полягало у створенні программы без файла описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu. Це додаток не виконує ніякої корисною праці та служить підтвердження деяких можливостей системи у створенні інтерфейсу пользователя. Моя завдання залежить від створення меню без файла описи ресурсів з допомогою функцій CreateMenu і… Читати ще >

Создать меню без файла описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu (реферат, курсова, диплом, контрольна)

Министерство освіти Російської Федерации Институт перепідготовки кадров Уральского державного технического университета Кафедра мікропроцесорної техники Курсовая работа.

ТЕМА: Створити меню без файла описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu..

Руководитель В. П. Кулюкин Слушатель грн. СП-923 Г. Г.

2001 г.

Введение

3.

Постановка завдання 5.

Создание меню без описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu 6.

Текст програми 7.

Заключение

13.

Библиографический список 14.

Введение

Ассемблеродне із найбільш старих з сьогодні мов программирования. Когда-то це був основний мову, якого не міг змусити комп’ютер зробити щось полезное.

Постепенно ситуація змінювалася. З’явилися кращі кошти спілкування з комп’ютером. Однак у відмінність з інших мов асемблер не помирав, більше він немог цього в принципе.

Если коротко, то асемблерце символічне уявлення машинного мови. Усі в машині на низькому, апаратній рівні наводяться на дію лише командами машинногшо языка.

Отсюда зрозуміло, що попри під назвою, мову Ассемблера кожному за типу комп’ютера свій. Це стосується й зовнішнього вигляду програм, написаних на Ассемблері, й ідей, відбитком яких цю мову является.

Известно, що програмування мовою ассемблера звертаються тоді, як від програми потрібно максимальна швидкість виконання, коли необхідно забезпечити взаємодію Космосу з нестандартними зовнішніми пристроями, коли необхідно повністю скористатися наявними можливостями процесора і ОС. Мовою ассемблера можна запрограмувати усі що здатна відповідна обчислювальну машину, тобто асемблер є машинно-ориентированным мовою програмування. Програмуючи на ассемблері іноді у силу звички, іноді у силу необхідності, особливо в організації інтерфейсу користувача, доводиться багаторазово програмувати одні й самі елементарні завдання. У мовами високого рівня цю проблему розв’язано застосуванням стандартних функцій і процедур. У ассемблері цю проблему міг би стати вирішеною з допомогою бібліотек стандартних функцій на рівні вихідних текстів, і об'єктних кодів, але такі бібліотеки не стандартизовані і поширюються разом із компиляторами. З появою Windows 95 ситуація трохи змінилася. Створення додатків мовою ассемблера є дуже складне завдання у зв’язку з високий рівень інтеграції прикладної програми розвитку й ОС, але нині немає необхідності багаторазово розв’язувати проблеми користувальницького інтерфейсу та управління виконанням команд лише на рівні машинних команд [I]. Так вони вирішуються нині за допомогою ОС з допомогою звернення функцій інтерфейсу прикладного програмування — Application Programming Interface (API).

Программирование користувальницького інтерфейсу із застосуванням функцій Win32 АПІ грунтується на використанні про ресурсів. Ресурсами є відповідним чином оформлені дані, використовувані операційній системою до створення зовнішнього відображення органів управління додатком, і кошти, щоб забезпечити введення даних у процесі виконання програми як діалогу. Ресурси описуються в текстовому файлі з розширенням.

rc. Файл ресурсів після обробки компілятора ресурсів немає і отримання двоичного файла з розширенням res з допомогою компоновщика об'єднується з виконуваним файлом.

Постановка задачи.

Найочевиднішим засобом управління додатком є меню. Рядок меню виводиться на екран безпосередньо під рядком заголовка. Це меню називається головним. Вибір елемента меню тягне у себе видачу додатку повідомлення WM_COMMAND, що містить ідентифікатор пункту меню. Ідентифікатори аналізуються в віконної процедурі докладання, що забезпечує відповідну реакцію на отримане повідомлення. Кожен пункт меню визначається трьома характеристиками. Перша визначає що буде відображатись у пункті меню — або рядок тексту, або картинка. Друга характеристика визначає або константу, посылаемую віконній процедурі у міжнародному сполученні WM_COMMAND, або всплывающее меню, яке виводиться на екран, коли користувач вибирає даний пункт меню. Третя характеристика вказує, чи є даний пункт меню дозволеним (enabled), запрешенным (disabled), недоступним (grayed) чи позначеним (checked). Ця характеристика пункту меню перестав бути обязательной.

Меню можна створити трьома способами. Можна визначити меню в файлі описи ресурсів, створити меню без файла описи ресурсів у програмі з допомогою функцій CreatMenu, AppendMenu і InsertMenu чи з допомогою функції LoadMenuIndirect, створивши попередньо структуру MENUITEMPLATE. Найпростішим та зрозумілим при програмуванні під Windows95 мовою ассемблера є визначення меню в файлі описи ресурсів з допомогою будь-якого текстового редактора.

Моя завдання залежить від створення меню без файла описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu. Однією з коштів створення меню без використання файла описи ресурсів, є функції CreateMenu з наступним додаванням потрібної кількості пунктів з допомогою функції AppendMenu.

Создание меню без описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu.

Windows-приложение на ассемблері містить один сегмент даних .data і тільки сегмент коду .code. У програмі використано 20 функцій АПІ. Параметри цим функцій передаються через стік, результат повертається у регістрі ЕАХ.

Директива mode1 задає пласку модель пам’яті (flat) і стиль передачі параметрів біля входу до процедури програми розвитку й виході їх (stdcall). Модель пам’яті flat позначає пласку модель пам’яті. Відповідно до пласкою моделлю пам’яті компілятор створює програму, що містить 32-битовый сегмент для даних, і коду програми. Вказівка цієї моделі пам’яті змушує компоновщик створити виконуваний файл з розширенням .exe.

Параметр stdcall визначає порядок передачі параметрів через стік справа налево.

Директива include включае у програмі файл win32.inc.

Функции Win32 АПІ, використовувані у програмі мають оголошені з допомогою директиви extrn для здобуття права компілятор міг згенерувати правильний код.

При створенні вікна докладання з допомогою CreateMenu отримуємо дескриптор меню і використовуємо їх у ролі однієї з параметрів функцій CreateWindowExA. Потім із допомогою функції CreatePopupMenu отримуємо дескриптор выпадающего меню і викликом AppendMenu визначаємо усіх пунктів наших меню.

Результат роботи програми наведено на Рис. 1.

Текст программы.

p386; ця директива дозволяє транслятору обробляти команды.

; процесора i386.

jumps; транслятор автоматично перетворює команду.

;условной.

; передачі управління у комбінацію умовної и безусловной.

; команд якщо умовна команда через обмеженість.

; області свого дії ;не забезпечує передачу.

; управління з потрібному адресу.

model flat, STDCALL; вибирається модель пам’яті для 32- разрядного.

; програмування і правил передачи.

; параметрів функцій STDCALL, далі.

; діючі по умолчанию.

include win32. inc; файл описи структур і констант.

L equ; послідовності символів LARGE,.

; що є ім'ям операції, яка проголошувала.

; наступний з ним операнд 32-разрядным,.

; присвоюється ім'я L.

IDM_QUIT equ 100.

IDM_ABOUT equ 101.

MF_ENABLED equ 0.

MF_POPUP equ 10h.

MF_OWNERDRAW equ 100h.

;Функции Win32 АПІ, використовувані программой.

extrn BeginPaint: PROC.

extrn CreateWindowExA: PROC.

extrn DefWindowProcA: PROC.

extrn DispatchMessageA: PROC.

extrn EndPaint: PROC.

extrn ExitProcess: PROC.

extrn GetMessageA: PROC.

extrn GetModuleHandleA: PROC.

extrn LoadCursorA: PROC.

extrn LoadIconA: PROC.

extrn RegisterClassA: PROC.

extrn PostQuitMessage: PROC.

extrn ShowWindow: PROC.

extrn TranslateMessage: PROC.

extrn UpdateWindow: PROC.

extrn CreateMenu: PROC.

extrn MessageBoxA: PROC.

extrn AppendMenuA: PROC.

extrn DrawMenuBar: PROC.

extrn CreatePopupMenu: PROC.

.data; переопределенное ім'я, що означає початок сегмента.

; данных.

newhwnd dd 0.

lppaint PAINTSTRUCT.

msg MSGSTRUCT.

wc WNDCLASS.

hInst dd 0.

fl dw 0.

szTitleName db « Это наше окно », 0.

szClassName db «ASMCLASS32 », 0.

szHello db «Привіт! », 0.

szAppName db «Повідомлення », 0.

hMenu dd 0.

hsubmenu dd 0.

item1 db « Меню », 0.

item2 db « Выход », 0.

item3 db «Повернення », 0.

.code; переопределенное ім'я, що означає початок.

; сегмента кода.

start:.

push L 0.

call GetModuleHandleA.

mov [hInst], eax.

;ініціалізація структури WndClass.

mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW +.

CS_GLOBALCLASS.

mov [wc.clsLpfnWndProc], offset WndProc.

mov [wc.clsCbClsExtra], 0.

mov [wc.clsCbWndExtra], 0.

mov eax, [hInst].

mov [wc.clsHInstance], eax.

push L IDI_APPLICATION.

push L 0.

call LoadIconA.

mov [wc.clsHIcon], eax.

push L IDC_ARROW.

push L 0.

call LoadCursorA.

mov [wc.clsHCursor], eax.

mov [wc.clsHbrBackground], COLOR_WINDOW + 1.

mov dword ptr [wc.clsLpszMenuName], 0.

mov dword ptr [wc.clsLpszClassName], offset szClassName.

push offset wc.

call RegisterClassA.

call CreateMenu.

mov [hMenu], eax.

push L 0; lpParam.

push [hInst]; hInstance.

push [hMenu]; menu.

push L 0; parent hwnd.

push L CW_USEDEFAULT; height.

push L CW_USEDEFAULT; width.

push L CW_USEDEFAULT; y.

push L CW_USEDEFAULT; x.

push L WS_OVERLAPPEDWINDOW; Style.

push offset szTitleName; Title string.

push offset szClassName; Class name.

push L 0; extra style.

call CreateWindowExA.

mov [newhwnd], eax.

call CreatePopupMenu.

mov [hsubmenu], eax.

push offset item2.

push L IDM_QUIT.

push 0.

push eax.

call AppendMenuA.

push offset item3.

push L IDM_ABOUT.

push 0.

push [hsubmenu] ;eax.

call AppendMenuA.

push offset item1.

push [hsubmenu].

push MF_POPUP.

push [hMenu].

call AppendMenuA.

nop.

push L SW_SHOWNORMAL.

push [newhwnd].

call ShowWindow.

push [newhwnd].

call UpdateWindow.

push [newhwnd].

call DrawMenuBar.

msg_loop:.

push L 0.

push L 0.

push L 0.

push offset msg.

call GetMessageA.

cmp ax, 0.

je end_loop.

push offset msg.

call TranslateMessage.

push offset msg.

call DispatchMessageA.

jmp msg_loop.

end_loop:.

push [msg.msWPARAM].

call ExitProcess.

;——Оконная процедура——.

WndProc proc uses ebx edi esi, hwnd: DWORD, wmsg: DWORD,.

wparam:DWORD, lparam: DWORD.

LOCAL hDC: DWORD.

cmp [wmsg], WM_DESTROY.

je wmdestroy.

cmp [wmsg], WM_SIZE.

je wmsize.

cmp [wmsg], WM_CREATE.

je wmcreate.

cmp [wmsg], WM_PAINT.

je wmpaint.

;**************************************.

cmp [wmsg], WM_COMMAND.

je wmcommand.

;**************************************.

jmp defwndproc.

wmcommand:.

mov eax, lparam.

cmp ax, 0.

jne m1.

mov eax, wparam.

cmp ax, IDM_ABOUT.

jne m2.

call MessageBoxA, 0, offset szHello, offset szAppName, MB_OK.

jmp m1.

m2: cmp ax, IDM_QUIT.

jne m1.

push 0.

call PostQuitMessage.

m1: mov eax, 0.

jmp finish.

wmcreate:.

mov eax, 0.

jmp finish.

defwndproc:.

push [lparam].

push [wparam].

push [wmsg].

push [hwnd].

call DefWindowProcA.

jmp finish.

wmdestroy:.

push L 0.

call PostQuitMessage.

mov eax, 0.

jmp finish.

wmsize:.

mov eax, 0.

jmp finish.

wmpaint:.

push offset lppaint.

push [hwnd].

call BeginPaint.

mov [hDC], eax.

push offset lppaint.

push [hwnd].

call EndPaint.

mov eax, 0.

jmp finish.

finish:.

ret.

WndProc endp.

;————————————————-.

public WndProc.

end start ; кінець программы.

.

рис1. Вікно программы Заключение Моя завдання полягало у створенні программы без файла описи ресурсів з допомогою функцій CreateMenu і CreatePopupMenu. Це додаток не виконує ніякої корисною праці та служить підтвердження деяких можливостей системи у створенні інтерфейсу пользователя.

Библиографический список Зубков С. В. Assembler. Для DOS Windows і Unix. М.: ДМК, 1999.

Пустоваров В.І. АСЕМБЛЕР. Програмування і аналіз коректності машинних программ.

Применение TURBO ASSEMBLER для програмування ПЕОМ. Часть1,2.: Методичні вказівки до лабораторній практикуму з дисципліни: «Системне програмне забезпечення» / Упорядник В. П. Кулюкин. Єкатеринбург: вид. ВПК УГТУ, 2000.

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