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

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство освіти Російської Федерації

Інститут перепідготовки кадрів

Уральського державного технічного

університету

Кафедра мікропроцесорної техніки

Курсова робота

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

Керівник В. П. Кулюкін

Слухач гр. СП-923 Г.Г.

2001р.

Зміст

Вступ 3

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

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

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

Висновок 13

Бібліографічний список 14

Введення

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

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

Якщо коротко, то асемблер-це символічне представлення машинної мови. Всі процеси в машині на найнижчому, апаратному рівні приводяться в дію тільки командами машінногшо мови.

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

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

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

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 функцій API. Параметри цих функцій передаються через стек, результат повертається в регістрі ЕАХ.

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

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

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

Функції Win32 API, що використовуються в програмі повинні бути оголошені за допомогою директиви 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 API, що використовуються програмою

            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; кінець програми

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

рис1. Вікно програми

Висновок

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

Бібліографічний список

Зубков С.В. Assembler. Для DOS Windows і Unix. М.: ДМК, 1999

Пустоваров В.І. Асемблер. Програмування та аналіз коректності машинних програм.

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


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
24.6кб. | скачати


Схожі роботи:
Створення меню без файлу опису ресурсів на основі функції LoadMenuIndirect
Управління якістю за допомогою керуючих функцій на підприємстві
Меню ПРАВКА редактора Word Опис усіх пунктів меню Правка редактора Word
Аналіз вірша АА Блоку Про весна без кінця і без краю
Блок а. а. - Аналіз вірша а. а. блоку про весна без кінця і без краю. ..
Блок а а Аналіз вірша а а блоку про весна без кінця і без краю
Без Ольги Ільїнської і без її драми з Обломовим не впізнати б нам Іллі Ілліча так як ми його тепер
Блок а а Без кінця і без краю мечтаquot
Блок а. а. - Без кінця і без краю мрія
© Усі права захищені
написати до нас