МЕНЮ


Фестивали и конкурсы
Семинары
Издания
О МОДНТ
Приглашения
Поздравляем

НАУЧНЫЕ РАБОТЫ


  • Инновационный менеджмент
  • Инвестиции
  • ИГП
  • Земельное право
  • Журналистика
  • Жилищное право
  • Радиоэлектроника
  • Психология
  • Программирование и комп-ры
  • Предпринимательство
  • Право
  • Политология
  • Полиграфия
  • Педагогика
  • Оккультизм и уфология
  • Начертательная геометрия
  • Бухучет управленчучет
  • Биология
  • Бизнес-план
  • Безопасность жизнедеятельности
  • Банковское дело
  • АХД экпред финансы предприятий
  • Аудит
  • Ветеринария
  • Валютные отношения
  • Бухгалтерский учет и аудит
  • Ботаника и сельское хозяйство
  • Биржевое дело
  • Банковское дело
  • Астрономия
  • Архитектура
  • Арбитражный процесс
  • Безопасность жизнедеятельности
  • Административное право
  • Авиация и космонавтика
  • Кулинария
  • Наука и техника
  • Криминология
  • Криминалистика
  • Косметология
  • Коммуникации и связь
  • Кибернетика
  • Исторические личности
  • Информатика
  • Инвестиции
  • по Зоология
  • Журналистика
  • Карта сайта
  • Создание меню без файла описания ресурсов на основе функции LoadMenuIndirect.

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

    -----------------------

    Текст

    [pic]

    DrawText

    TextOut

    Примитивы

    Графика

    Отрезок

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

    Павлин

    Кружева

    Эффекты

    О приложении


    Приглашения

    09.12.2013 - 16.12.2013

    Международный конкурс хореографического искусства в рамках Международного фестиваля искусств «РОЖДЕСТВЕНСКАЯ АНДОРРА»

    09.12.2013 - 16.12.2013

    Международный конкурс хорового искусства в АНДОРРЕ «РОЖДЕСТВЕНСКАЯ АНДОРРА»




    Copyright © 2012 г.
    При использовании материалов - ссылка на сайт обязательна.