Программа, демонстрирующая иерархию окон Windows (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-приложение на ассемблере


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

<2> .386

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

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

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

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

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

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

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

<9> extrn GetModuleHandleA:PROC

<10> extrn GetVersionExA:PROC В

<11> extrn GetCommandLineA:PROC

<12> extrn GetEnvironmentStringsA:PROC

<13> extrn GetEnvironmentStringsA:PROC

<14> extrn GetStartupInfoA:PROC

<15> extrn LoadIconA:PROC

<16> extrn LoadCursorA:PROC

<17> extrn GetStockObject:PROC

<18> extrn RegisterClassExA:PROC

<19> extrn CreateWindowExA:PROC

<20> extrn ShowWindow:PROC

<21> extrn UpdateWindow:PROC

<22> extrn GetMessageA:PROC

<23> extrn TranslateMessage:PROC

<24> extrn DispatchMessageA:PROC

<25> extrn ExitProcess:PROC

<26> extrn PostQuitMessage:PROC

<27> extrn DefWindowProcA:PROC

<28> extrn PlaySoundA:PROC

<29> extrn ReleaseDC:PROC

<30> extrn TextOutA:PROC

<31> extrn GetDC:PROC

<32> extrn BeginPaint:PROC

<33> extrn EndPaint:PROC

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

<35> public WindowProc

<36> .data

<37> hwnd dd 0

<38> hInst dd 0

<39> hdc dd 0

<40> ;lpVersionInformation OSVERSIONINFO

<41> wcl WNDCLASSEX

<42> message MSG

<43> ps PAINTSTRUCT

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

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

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

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

<47> MesWindowLen= $-MesWindow

<48> playFileCreate db 'create.wav',0

<49> playFilePaint db 'paint.wav',0

<50> playFileDestroy db 'destroy.wav',0

<51> . code

<52> start proc near

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

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

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

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

<57> ;вызов BOOL GetVersionEx(LPOSVERSIONINFO lpVersionInformation)

<58> ; push offset lpVersionInformation

<59> ; call GetVersionExA

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

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

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

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


Случайные файлы

Файл
33787.rtf
71015.rtf
73656-1.rtf
146323.doc
KP_MCP_O.DOC




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.