Курсовая: Создание меню без файла описания ресурсов на основе функции LoadMenuIndirect - текст курсовой. Скачать бесплатно.
Банк рефератов, курсовых и дипломных работ. Много и бесплатно. # | Правила оформления работ | Добавить в избранное
 
 
   
Меню Меню Меню Меню Меню
   
Napishem.com Napishem.com Napishem.com

Курсовая

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

Банк рефератов / Программирование

Рубрики  Рубрики реферат банка

закрыть
Категория: Курсовая работа
Язык курсовой: Русский
Дата добавления:   
 
Скачать
Microsoft Word, 1929 kb, скачать бесплатно
Обойти Антиплагиат
Повысьте уникальность файла до 80-100% здесь.
Промокод referatbank - cкидка 20%!

Узнайте стоимость написания уникальной работы




Министерство образования Российской Федерации

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

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

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




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






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


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












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



Слушатель гр. СП-923 И.Г.


















г.Нягань

2001г.


Введение.


Известно, что к программированию на языке ассемблера обращаются тогда, когда от программы требуется максимальная скорость исполнения, когда необходимо обеспечить взаимодействие с нестандартными внешними устройствами, когда необходимо полностью использовать

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

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

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



Общая часть.



Наиболее очевидным средством управления приложением является меню. Строкаа меню выводится на экран непосредственно под строкой заголовка. Это меню называется главным. Выбор элемента меню влечет за собой выдачу приложения сообщения WD_COMMAND, содержащего идентификатор пункта меню. Идентификаторы анализируются в оконной процедуре приложения, что обеспечивает соответствующую реакцию на полученное сообщение. Каждый пунк меню определяется тремя характеристиками. Первая определяет то, что будет отображаться в данном пункте меню – это либо строка текста, либо картинка. Вторая характеристика определяет либо константу, посылаемую оконной процедуре сообщении WM_COMMAND, либо всплывающее меню, которое выводится на экран, когда пользователь выбирает данный пункт меню. Третья характеристика указывает, является ли данный пункт меню разрешенным (enabled), запрешенным (disabled), недоступным (grayed) или помеченным (checked). Эта характеристика пункта меню не является обязательной.

Для того, чтобы включить меню в приложение, необходимо реализовать следующую последовательность шагов:

  • разработать сценарий меню. Перед тем как приступить к процессу включения меню в конкретное приложение, разработаем логическую схему. Этот шаг необходим для того, чтобы уже на стадии проектирования обеспечить эргономические свойства приложения. Ведь меню – это один из немногих элементов интерфейса, с которым пользователь постоянно будет иметь дело. Поэтому схема меню должна иметь наглядную иерархическую структуру, с логически увязанными между собой пунктами этой иерархии, что поможет пользователю эффективно использовать все возможности приложения. Для того, чтобы вести предметный разговор, поставим себе задачу разработать для окна нашего приложения главное меню. При этом мы исследуем возможности вывода в окно приложения текста и графики, а также покажем способы решения общих проблем, связанных с разработкой приложения. Наше меню достаточно простое и состоит из трех элементов: “Текст”,”Графика”,”О приложении”. Иерархическая структура меню представлена.


DrawText

Примитивы

Павлин

Эффекты


Текст

TextOut

Графика

Отрезок

Прямоугольник

Кружева

О приложении



  • описать схему меню в файле ресурсов. Для выполнения этого описания используются специальные операторы.

  • составить текст включаемого файла, необходимого для компиляции ресурсного файла

  • компилировать ресурсный файл.

  • подключить меню на стадии регистрации того окна приложения, для работы с которым оно будет использоваться.

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




Основная часть.


Моя задача заключается в том, чтобы написать программу на тему: “Создать меню без файла описания ресурсов на основе функций LoadMenuIndirect”.

Одним из средств создания меню без использования файла описания ресурсов является функция LoadMenuIndirect. Для применения этой функции необходимо создать шаблон меню, определяемый структурами

MENUITEMTEMPLATEHEADER и MENUITEMTEMPLATE.

Полный шаблон меню состоит из заголовка и хотя бы одного описания пункта меню. Заголовок – структура MENUITEMTEMPLATEHEADER – cостоит из двух полей размером в слово. В первом слове содержится номер версии функции. Для Windows NT и Win16 это 0, для Windows95-1. Во втором слове содержится смещение до первой структуры MENUITEMTEMPLATE. Если между заголовком и описанием первого пункта меню нет дополнительной информации, это поле содержит 0.

Описания пунктов меню, следущие за заголовком, должны быть выравнены на границе двойного слова. Структура MENUITEMTEMPLATE имеет, как правило, пять полей. Шестое поле имеет смысл для пункта меню, указывающего на всплывающее меню.

В качестве примера приводится окно с главными и всплывающими меню, созданными с помощью функции LoadMenuIndirect.



Программа.


p386

jumps

model flat,STDCALL

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

L equ

IDM_QUIT equ 100

IDM_ABOUT equ 101

MF_ENABLED equ 0

MF_POPUP equ 1h

;Функции 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 LoadMenuIndirectA:PROC

extrn MessageBoxA: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

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


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

.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

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], eax

push 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 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Авиация и космонавтика
2Архитектура и строительство
3Астрономия
 
4Безопасность жизнедеятельности
5Биология
 
6Военная кафедра, гражданская оборона
 
7География, экономическая география
8Геология и геодезия
9Государственное регулирование и налоги
 
10Естествознание
 
11Журналистика
 
12Законодательство и право
13Адвокатура
14Административное право
15Арбитражное процессуальное право
16Банковское право
17Государство и право
18Гражданское право и процесс
19Жилищное право
20Законодательство зарубежных стран
21Земельное право
22Конституционное право
23Конституционное право зарубежных стран
24Международное право
25Муниципальное право
26Налоговое право
27Римское право
28Семейное право
29Таможенное право
30Трудовое право
31Уголовное право и процесс
32Финансовое право
33Хозяйственное право
34Экологическое право
35Юриспруденция
36Иностранные языки
37Информатика, информационные технологии
38Базы данных
39Компьютерные сети
40Программирование
41Искусство и культура
42Краеведение
43Культурология
44Музыка
45История
46Биографии
47Историческая личность
 
48Литература
 
49Маркетинг и реклама
50Математика
51Медицина и здоровье
52Менеджмент
53Антикризисное управление
54Делопроизводство и документооборот
55Логистика
 
56Педагогика
57Политология
58Правоохранительные органы
59Криминалистика и криминология
60Прочее
61Психология
62Юридическая психология
 
63Радиоэлектроника
64Религия
 
65Сельское хозяйство и землепользование
66Социология
67Страхование
 
68Технологии
69Материаловедение
70Машиностроение
71Металлургия
72Транспорт
73Туризм
 
74Физика
75Физкультура и спорт
76Философия
 
77Химия
 
78Экология, охрана природы
79Экономика и финансы
80Анализ хозяйственной деятельности
81Банковское дело и кредитование
82Биржевое дело
83Бухгалтерский учет и аудит
84История экономических учений
85Международные отношения
86Предпринимательство, бизнес, микроэкономика
87Финансы
88Ценные бумаги и фондовый рынок
89Экономика предприятия
90Экономико-математическое моделирование
91Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
- Что такое чебурек?
- Это водитель "копейки". Он тощий и всегда в масле.
Anekdot.ru

Узнайте стоимость курсовой, диплома, реферата на заказ.

Обратите внимание, курсовая по программированию "Создание меню без файла описания ресурсов на основе функции LoadMenuIndirect", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

Смотрите также:


Банк рефератов - РефератБанк.ру
© РефератБанк, 2002 - 2017
Рейтинг@Mail.ru