46075 (Программа, демонстрирующая иерархию окон Windows)

2016-07-31СтудИзба

Описание файла

Документ из архива "Программа, демонстрирующая иерархию окон Windows", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "46075"

Текст из документа "46075"

Министерство образования РФ

ИНСТИТУТ ПЕРЕПОДГОТОВКИ КАДРОВ

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

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

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

Программа демонстрирующая иерархию окон Windows

руководитель: Кулюкин В.П.

слушатель гр.СП-923:

2001г.

Содержание

Введение

1. Окон­ные приложения Windows.

2. Каркасное Windows-приложение на ассемблере

3. Иерархия окон

4. «Программа демонстрирующая иерархию окон Windows»

5.Библиографический список

Введение

В подавляющем большинстве книг о программировании для Windows изложение, как правило, ведется на базе языка C/C++, реже — на базе Pascal. А что же ас­семблер — в стороне? Конечно, нет! Мы не раз обращали ваше внимание на пра­вильное понимание места ассемблера в архитектуре компьютера. Любая програм­ма на языке самого высокого уровня в своем внутреннем виде представляет собой последовательность машинных кодов. А раз так, то всегда остается теоретическая возможность написать ту же программу, но уже на языке ассемблера: Непонима­ние или недооценка такой возможности приводит к тому, что достаточно часто приходится слышать фразу, подобную следующей: «Ах, опять этот ассемблер, но ведь это что-то несерьезное!» Также трудно согласиться с тезисом, который чаще всего следует вслед за этой фразой. Суть его сводится к утверждению того, что мощность современных компьютеров позволяет не рассматривать проблему эф­фективности функционирования программы в качестве первоочередной. Гораздо легче решить ее за счет увеличения объема памяти, быстродействия центрально­го процессора и качества компьютерной периферии. Чем обосновать необходимость разработки Windows-приложений на языке ассем­блера? Приведем следующие аргументы:

языке ассемблера позволяет программисту полностью контролировать создава­емый им программный код и оптимизировать его по своему усмотрению;

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

при программировании на ассемблере сохраняется полный доступ к аппарат­ным ресурсам компьютера;

приложение, написанное на языке ассемблера, как правило, быстрее загружа­ется в оперативную память компьютера;

приложение, написанное на языке ассемблера, обладает, как правило, более высокой скоростью работы и реактивностью ответа на действия пользователя. Разумеется, эти аргументы не следует воспринимать, как некоторую рекламную кампанию в поддержку языка ассемблера. Но нельзя забывать и о том, что суще­ствует бесконечное множество прикладных задач, ждущих своей очереди на ком­пьютерную реализацию. Далеко не все из этих задач требуют применения тяже­ловесных средств разработки, результатом работы которых являются столь же тяжеловесные исполняемые файлы. Многие прикладные задачи могут быть изящ­но исполнены на языке ассемблера, не теряя привлекательности.

1. Окон­ные приложения Windows.

Windows поддерживает два типа приложений:

оконное приложение — строится на базе специального набора функций (API), составляющих графический интерфейс пользователя (GUI, Graphic User Inter­face). Оконное приложение представляет собой программу, которая весь вы­вод на экран производит в графическом виде. Первым результатом работы оконного приложения является отображение на экране специального объек­та — окна. После того как окно отображено на экране, вся работа приложения направлена на то, чтобы поддерживать его в актуальном состоянии;

Основной тип приложений в Windows — окон­ные, поэтому с них мы и начнем знакомство с процессом разработки программ для этой операционной системы.

Любое оконное Windows-приложение имеет типовую структуру, основу которой составляет так называемое каркасное приложение. Это приложение содержит ми­нимально необходимый программный код для обеспечения функционирования полноценного Windows-приложения. Не случайно во всех источниках в качестве первого Windows-приложения рекомендуется изучать и исследовать работу не­которого каркасного приложения, так как именно оно отражает основные особен­ности взаимодействия программы с операционной системой Windows. Более того, написав и отладив один раз каркасное приложение, вы будете использовать его в необходимую терминологию и сможем больше внимания уделить логике работы Windows-приложения, а не деталям его реализации.

Минимальное приложение Windows состоит из трех частей:

главной функции;

цикла обработки сообщений;

оконной функции.

Выполнение любого оконного Windows-приложения начинается с главной функ­ции. Она содержит код, осуществляющий настройку (инициализацию) приложе­ния в среде операционной системы Windows. Видимым для пользователя резуль­татом работы главной функции является появление на экране графического объекта в виде окна. Последним действием кода главной функции является со­здание цикла обработки сообщений. После его создания приложение становится пассивным и начинает взаимодействовать с внешним миром посредством специ­альным образом оформленных данных — сообщений. Обработка поступающих приложению сообщений осуществляется специальной функцией, называемой оконной. Оконная функция уникальна тем, что может быть вызвана только из операционной системы, а не из приложения, которое ее содержит. Таким образом, Windows-приложение, как минимум, должно состоять из трех перечис­ленных элементов.

Каркасное Windows-приложение на ассемблере содержит один сегмент данных .data и один сегмент кода . code. Сегмент стека в исходных текстах Windows-приложений непосредственно описывать не нужно. Windows выделяет для стега объем памяти, размер которого задан программистом в файле с расширением . def. Текст листинга 2 достаточно большой. Поэтому для обсуждения разобьем erо комментариями на характерные фрагменты, каждый из которых затем поясним необходимой степенью детализации.

2. Каркасное Windows-приложение на ассемблере

;Пример каркасного приложения для Win32

.386

locals ;разрешает применение локальных меток в программе

.model flat, STDCALL ;модель памяти flat Я

;STDCALL - передача параметров в стиле С (справа налево),

<6> ; вызываемая процедура чистит за собой стек Ш

include windowA.inc ;включаемый файл с описаниями базовых структур

;и констант Win32 т

;Объявление внешними используемых в данной программе функций Win32 (ASCII):

extrn GetModuleHandleA:PROC

extrn GetVersionExA:PROC В

extrn GetCommandLineA:PROC

extrn GetEnvironmentStringsA:PROC

extrn GetEnvironmentStringsA:PROC

extrn GetStartupInfoA:PROC

extrn LoadIconA:PROC

extrn LoadCursorA:PROC

extrn GetStockObject:PROC

extrn RegisterClassExA:PROC

extrn CreateWindowExA:PROC

extrn ShowWindow:PROC

extrn UpdateWindow:PROC

extrn GetMessageA:PROC

extrn TranslateMessage:PROC

extrn DispatchMessageA:PROC

extrn ExitProcess:PROC

extrn PostQuitMessage:PROC

extrn DefWindowProcA:PROC

extrn PlaySoundA:PROC

extrn ReleaseDC:PROC

extrn TextOutA:PROC

extrn GetDC:PROC

extrn BeginPaint:PROC

extrn EndPaint:PROC

;объявление оконной функции объектом, видимым за пределами данного кода

public WindowProc

.data

hwnd dd 0

hInst dd 0

hdc dd 0

;lpVersionInformation OSVERSIONINFO

wcl WNDCLASSEX

message MSG

ps PAINTSTRUCT

szClassName db 'Приложение Win32 ',0

szTitleName db 'Каркасное приложение Win32 на ассемблере'.0

MesWindow db 'Это процесс разработки приложения

на ассемблере?'

MesWindowLen= $-MesWindow

playFileCreate db 'create.wav',0

playFilePaint db 'paint.wav',0

playFileDestroy db 'destroy.wav',0

. code

start proc near

;точка входа в программу:

;начало стартового кода

;вызовы расположенных ниже функций можно при необходимости раскомментировать,

:но они не являются обязательными в данной программе

;вызов BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInformation)

; push offset lpVersionInformation

; call GetVersionExA

;далее можно вставить код для анализа информации о версии Windows

;вызов LPTSTR GetCommandLine(VOID) - получить указатель на командную строку

; call GetCommandLineA :врегистре еах адрес

;вызов LPVOID GetEnvironmentStrings (VOID) - получить указатель

;на блок с переменными окружения

; call GetEnvironmentStringsA ;врегистре еах адрес

;вызов VOIDGetStartupInfo(LPSTARTUPINFO lpStartupInfo) ;указатель

;на структуру STARTUPINFO

; push offset lpStartupInfo

; call GetStartupInfoA

;вызов HMODULE GetModuleHandleA (LPCTSTR lpModuleName)

push NULL ;0->GetModuleHandle

call GetModuleHandleA ;получить значение базового адреса,

mov hInst, eax ;no которому загружен модуль.

;далее hInst будет использоваться в качестве дескриптора данного приложения

;конец стартового кода

WinMain:

;определить класс окна ATOM RegisterClassEx(CONST WNDCLASSEX *lpWndClassEx),

; где *lpWndClassEx - адрес структуры WndClassEx

;для начала инициализируем поля структуры WndClassEx

mov wcl.cbSize,typeWNDCLASSEX -.размер структуры

:в wcl.cbCIZE

mov wcl.style,CS_HREDRAW+CS_VREDRAW

mov wcl.pfnWndProg,offsetWindowProg ;адрес оконной процедуры

mov wcl.cbCisExtra,0

mov wcl.cbWndExtra,0

mov eax,hInst

mov ;дискриптор приложения в поле hInstance структуры wcl

mov wcl.hInstance, eax

;готовим вызов HICON LoadIcon (HINSTANCE hInstance, LPCTSTR lpIconName)

push IDI_APPLICATION ,-стандартный значок

push 0 ;NULL

саП LoadIconA

mov wcl.hIcon, eax ,-дескриптор значка в поле hIcon I

;структуры wcl

;готовим вызов HCURSOR LoadCursorA (HINSTANCE hInstance, LPCTSTR M ;lpCursorName)

push IDC_ARROW ,-стандартный курсор - стрелка

push 0

саll LoadCursorA

mov wcl.hCursor,eax ;дескриптор курсора в поле hCursor

;структуры wc1

;определим цвет фона окна - белый

;готовим вызов HGDIOBJ GetStockObject(int fnObject)

push WHITE_BRUSH

саП GetStockObject

mov wcl.hbrBackground, eax

mov dword ptrwcl.lpszMenuName, 0 ;без главного меню

mov dwordptrwcl.lpszClassName,offsetszC1assName; имя

;класса окна

mov wcl.hIconSm, 0

;регистрируем класс окна - готовим вызов RegisterClassExA (&wndclass)

push offset wcl

саП RegisterClassExA

test ax, ах;проверить на успех регистрации класса окна

jz end_cyc1_msg ;неудача

;создаем окно:

;готовим вызовHWND CreateWindowExA(DWORDdwExStyle,

LPCTSTR1pClassName,

; LPCTSTR 1pW1ndowName, DWORD dwStyle, int x, int у, int nWidth,

|;int nHeight,

; HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID

;lpParam)

push 0 ;lpParam

push hInst ;hInstance

push NULL ;menu

push NULL ;parent hwnd

push CW_USEDEFAULT ;высота окна

push CW_USEDEFAULT ;ширина окна

push CW_USEDEFAULT ;координата у левого верхнего угла

;окна

push CW_USEDEFAULT ;координата х левого верхнего угла

push WS_OVERLAPPEDWINDOW ;стиль окна

push offset szTitleName ;строка заголовка окна

push offset szClassName ;имя класса окна

push NULL

саll CreateWindowExA

mov hwnd,eax ;-дескриптор окна

;показать окно:

;готовим вызов BOOL ShowWindow( HWND hWnd, int nCmdShow )

push SW_SHOWNORMAL

push hwnd

call ShowWindow

;перерисовываем содержимое окна

;готовим вызов BOOL UpdateWindow( HWND hWnd )

push hwnd

call UpdateWindow

;запускаем цикл сообщений:

;готовим вызов BOOL GetMessageA( LPMSG lpMsg, HWND hWnd,

; UINTwMsgFilterMin,UINTwMsgFilterMax)

cycl_msg:

push 0

push 0

push NULL

push offset message

cal 1 GetMessageA

cmp ах, 0

je end_cycl_msg

;трансляция ввода с клавиатуры

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5167
Авторов
на СтудИзбе
437
Средний доход
с одного платного файла
Обучение Подробнее