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

Посмотреть архив целиком

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


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


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


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





Оценка проекта

Члены комиссии





Программа демонстрирующая иерархию окон 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


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

Файл
12612-1.rtf
11315.rtf
26946.rtf
23545.rtf
115798.rtf




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