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

     

     

     

     

     

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

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

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

    ; процесора i386
    2. jumps; транслятор автоматично перетворить команду

    ; умовної

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

    ; команд якщо умовна команда в силуобмеженості

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

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

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

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

    ; що діють зазамовчуванням
    4. include win32.inc; файл опису структур і констант
    5. L equ; послідовності символів LARGE,

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

    ; наступний за нею операнд

    32-розрядних,

    ; присвоюється ім'я L
    6. IDM_QUIT equ 100
    7. IDM_ABOUT equ 101
    8. MF_ENABLED equ 0
    9. MF_POPUP equ 10h
    10. MF_OWNERDRAW equ 100h

    ; Опції Win32 API, які використовуються програмою
    11. extrn BeginPaint: PROC
    12. extrn CreateWindowExA: PROC
    13. extrn DefWindowProcA: PROC
    14. extrn DispatchMessageA: PROC
    15. extrn EndPaint: PROC
    16. extrn ExitProcess: PROC
    17. extrn GetMessageA: PROC
    18. extrn GetModuleHandleA: PROC
    19. extrn LoadCursorA: PROC
    20. extrn LoadIconA: PROC
    21. extrn RegisterClassA: PROC
    22. extrn PostQuitMessage: PROC
    23. extrn ShowWindow: PROC
    24. extrn TranslateMessage: PROC
    25. extrn UpdateWindow: PROC
    26. extrn CreateMenu: PROC
    27. extrn MessageBoxA: PROC
    28. extrn AppendMenuA: PROC
    29. extrn DrawMenuBar: PROC
    30. extrn CreatePopupMenu: PROC


    31. . data; перевизначених ім'я, що означає початок сегмента

    ; даних
    32. newhwnd dd 0
    33. lppaint PAINTSTRUCT
    34. msg MSGSTRUCT
    35. wc WNDCLASS
    36. hInst dd 0
    37. fl dw 0
    38. szTitleName db 'Це наше вікно', 0
    39. szClassName db 'ASMCLASS32', 0
    40. szHello db 'Hello!', 0
    41. szAppName db 'Повідомлення', 0
    42. hMenu dd 0
    43. hsubmenu dd 0
    44. item1 db 'Меню', 0
    45. item2 db 'Вихід', 0
    46. item3 db 'Повернення', 0

    47. . code; перевизначених ім'я, що означає початок

    ; сегменту коду
    48. start:
    49. push L 0
    50. call GetModuleHandleA
    51. mov [hInst], eax

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

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

    CS_GLOBALCLASS
    53. mov [wc.clsLpfnWndProc], offset WndProc
    54. mov [wc.clsCbClsExtra], 0
    55. mov [wc.clsCbWndExtra], 0
    56. mov eax, [hInst]
    57. mov [wc.clsHInstance], eax
    58. push L IDI_APPLICATION
    59. push L 0
    60. call LoadIconA
    61. mov [wc.clsHIcon], eax
    62. push L IDC_ARROW
    63. push L 0
    64. call LoadCursorA
    65. mov [wc.clsHCursor], eax
    66. mov [wc.clsHbrBackground], COLOR_WINDOW + 1
    67. mov dword ptr [wc.clsLpszMenuName], 0
    68. mov dword ptr [wc.clsLpszClassName], offset szClassName
    69. push offset wc
    70. call RegisterClassA

    71. call CreateMenu
    72. mov [hMenu], eax
    73. push L 0; lpParam
    74. push [hInst]; hInstance
    75. push [hMenu]; menu
    76. push L 0; parent hwnd
    77. push L CW_USEDEFAULT; height
    78. push L CW_USEDEFAULT; width
    79. push L CW_USEDEFAULT; y
    80. push L CW_USEDEFAULT; x
    81. push L WS_OVERLAPPEDWINDOW; Style
    82. push offset szTitleName; Title string
    83. push offset szClassName; Class name
    84. push L 0; extra style

    85. call CreateWindowExA
    86. mov [newhwnd], eax

    87. call CreatePopupMenu
    88. mov [hsubmenu], eax
    89. push offset item2
    90. push L IDM_QUIT
    91. push 0
    92. push eax
    93. call AppendMenuA

    94. push offset item3
    95. push L IDM_ABOUT
    96. push 0
    97. push [hsubmenu]; eax
    98. call AppendMenuA

    99. push offset item1
    100. push [hsubmenu]
    101. push MF_POPUP
    102. push [hMenu]
    103. call AppendMenuA
    104. nop


    105. push L SW_SHOWNORMAL
    106. push [newhwnd]
    107. call ShowWindow

    108. push [newhwnd]
    109. call UpdateWindow

    110. push [newhwnd]
    111. call DrawMenuBar
    112. msg_loop:
    113. push L 0
    114. push L 0
    115. push L 0
    116. push offset msg
    117. call GetMessageA
    118. cmp ax, 0
    119. je end_loop

    120. push offset msg
    121. call TranslateMessage

    122. push offset msg
    123. call DispatchMessageA

    124. jmp msg_loop

    125. end_loop:
    126. push [msg.msWPARAM]
    127. call ExitProcess

    128. ;---- Віконна процедура ----
    129. WndProc proc uses ebx edi esi, hwnd: DWORD, wmsg: DWORD,
    130. wparam: DWORD, lparam: DWORD
    131. LOCAL hDC: DWORD

    132. cmp [wmsg], WM_DESTROY
    133. je wmdestroy
    134. cmp [wmsg], WM_SIZE
    135. je wmsize
    136. cmp [wmsg], WM_CREATE
    137. je wmcreate
    138. cmp [wmsg], WM_PAINT
    139. je wmpaint

    140. ;**************************************< br>141. cmp [wmsg], WM_COMMAND
    142. je wmcommand
    143. ;**************************************< br>144. jmp defwndproc

    145. wmcommand:
    146. mov eax, lparam
    147. cmp ax, 0
    148. jne m1
    149. mov eax, wparam
    150. cmp ax, IDM_ABOUT
    151. jne m2
    152. call MessageBoxA, 0, offset szHello, offset szAppName, MB_OK
    153. jmp m1
    154. m2: cmp ax, IDM_QUIT
    155. jne m1
    156. push 0
    157. call PostQuitMessage
    158. m1: mov eax, 0
    159. jmp finish


    160. wmcreate:
    161. mov eax, 0
    162. jmp finish

    163. defwndproc:
    164. push [lparam]
    165. push [wparam]
    166. push [wmsg]
    167. push [hwnd]
    168. call DefWindowProcA
    169. jmp finish

    170. wmdestroy:
    171. push L 0
    172. call PostQuitMessage
    173. mov eax, 0
    174. jmp finish

    175. wmsize:
    176. mov eax, 0
    177. jmp finish

    178. wmpaint:
    179. push offset lppaint
    180. push [hwnd]
    181. call BeginPaint
    182. mov [hDC], eax
    183. push offset lppaint
    184. push [hwnd]
    185. call EndPaint
    186. mov eax, 0
    187. jmp finish

    188. finish:
    189. ret
    190. WndProc endp
    191. ;---------------------------------< br>192. public WndProc
    193. end start; кінець програми

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

    Висновок

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

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


    1. Зубков С.В. Assembler. Для DOS Windows і Unix. М.: ДМК, 1999
    2. Пустоваров В.І. Асемблер. Програмування та аналіз коректності машинних програм.
    3. Застосування TURBO ASSEMBLER для програмування ПЕОМ. Частина 1, 2.:

    Методичні вказівки до лабораторного практикуму з дисципліни:

    «Системне програмне забезпечення»/Укладач В. П. Кулюкін.

    Екатеринбург: изд . ІПК УГТУ, 2000.


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

     

     

     

     

     

     

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