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

     

     

     

     

     

         
     
    Створення меню без файла опису ресурсів на основі функції LoadMenuIndirect .
         

     

    Інформатика, програмування

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

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

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

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

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

    ТЕМА: Створення меню без файла опису ресурсів на основі функції

    LoadMenuIndirect.

    Пояснювальна записка

    Керівник доц., к.т.н. В. П. Кулюкін

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

    г.Нягань

    2001р.

    Введення.

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

    Загальна частина.


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

    Тому схема меню повинна мати наочну ієрархічну структуру, з логічно пов'язані між собою пунктами цієї ієрархії, що допоможе користувачеві ефективно використовувати всі можливості додатки. Для того, щоб вести предметну розмову, поставимо собі завдання розробити для вікна нашого застосування головне меню. При цьому ми досліджуємо можливості виводу у вікно додатка тексту та графіки, а також покажемо способи вирішення загальних проблем, пов'язаних з розробкою програми. Наше меню досить проста і складається з трьох елементів: "Текст", "Графіка", "Про програму". Ієрархічна структура меню представлена.

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

    Основна частина.

    Моє завдання полягає в тому, щоб написати програму на тему: "Створитименю без файла опису ресурсів на основі функцій LoadMenuIndirect ".
    Одним із засобів створення меню без використання файлу опису ресурсівє функція LoadMenuIndirect. Для застосування цієї функції необхідностворити шаблон меню, який визначається структурами
    MENUITEMTEMPLATEHEADER і MENUITEMTEMPLATE.
    Повний шаблон меню складається з заголовка і хоча б одного опису пунктуменю. Заголовок - структура MENUITEMTEMPLATEHEADER - Відбудеться з двох поліврозміром в слово. У першому слові міститься номер версії функції. Для
    Windows NT і Win16 це 0, для Windows95-1. У другому слові міститьсязсув до першого структури MENUITEMTEMPLATE. Якщо між заголовком іописом першого пункту меню немає додаткової інформації, це полемістить 0.
    Описи пунктів меню, наступні за заголовком, повинні бути вирівняні накордоні подвійного слова. Структура MENUITEMTEMPLATE має, як правило, п'ятьполів. Шосте поле має сенс для пункту меню, що вказує на спливаючеменю.
    Як приклад наводиться вікно з головними і спливаючими меню,створеними за допомогою функції LoadMenuIndirect.

    Програма.

    p386jumpsmodel flat, STDCALLinclude win32.inc; файл опису структур і констант
    L equ
    IDM_QUIT equ 100
    IDM_ABOUT equ 101
    MF_ENABLED equ 0
    MF_POPUP equ 1h
    ; Опції Win32 API, які використовуються програмоюextrn BeginPaint: PROCextrn CreateWindowExA: PROCextrn DefWindowProcA: PROCextrn DispatchMessageA: PROCextrn EndPaint: PROCextrn ExitProcess: PROCextrn GetMessageA: PROCextrn GetModuleHandleA: PROCextrn LoadCursorA: PROCextrn LoadIconA: PROCextrn RegisterClassA: PROCextrn PostQuitMessage: PROCextrn ShowWindow: PROCextrn TranslateMessage: PROCextrn UpdateWindow: PROCextrn LoadMenuIndirectA: PROCextrn MessageBoxA: PROC

    . datanewhwnd dd 0lppaint PAINTSTRUCT msg MSGSTRUCT wc WNDCLASS hInst dd 0fl dw 0szTitleName db 'Це наше вікно', 0szClassName db 'ASMCLASS32', 0szHello db 'Hello!', 0szAppName db 'Повідомлення', 0hMenu dd 0 align 4
    MenuTemplate dw 1,0; Заголовок меню. 1 - ознака

    ; структури для функції Windows95 align 4 dd 0; тип пункту dd 0, MF_ENABLED, 0; IDM_ABOUT; dw 81h dw'&',' M ',' e ',' n ', 'u', '1 ', 0

    align 4 dd 0,0,0, IDM_QUIT dw 0 dw' E','&',' x ',' i ',' t ', 0 , 0

    align 4 dd 0,0, IDM_ABOUT dw 0 dw'&',' Q ',' u ',' i ',' t ', '1', 0 < p> align 4 dd 0,0,0; IDM_QUIT dw 81h; Ознака вспл. меню dw 'Q', 'u', 'i', 't', '2 ', 0,0,0

    align 4 dd 0,0, IDM_ABOUT dw 0 dw' Q ',' u ',' i ',' t ', '3', 0,0

    align 4 dd 0,0, IDM_QUIT dw 80h dw 'E','&',' x', 'i ',' t ', 0,0
    . codestart: 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 push offset MenuTemplate call LoadMenuIndirectA 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], eaxpush L SW_SHOWNORMAL push [newhwnd] call ShowWindow

    push [newhwnd] call UpdateWindow

    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

    ; we never get to here

    ;---- Віконна процедура ----
    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 m1m2: cmp ax, IDM_QUIT jne m1 push 0 call PostQuitMessagem1: 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], eaxpush offset lppaint push [hwnd] call EndPaint mov eax, 0 jmp finish

    finish: ret
    WndProc endp
    ;---------------------------------public WndProcend start

    -----------------------< br>Текст

    DrawText

    TextOut

    Примітиви

    Графіка

    Відрізок

    Прямокутник

    Павич

    Мереживо

    Ефекти

    Про програму

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

     

     

     

     

     

     

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