ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Створити меню без файла опису ресурсів за допомогою функцій 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 'Hello!', 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.

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status