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

Реферат

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

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

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

закрыть
Категория: Реферат
Язык реферата: Русский
Дата добавления:   
 
Скачать
Архив Zip, 161 kb, скачать бесплатно
Заказать
Узнать стоимость написания уникального реферата

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

Министерство образования РФ ИНСТИТУТ ПЕРЕПОДГОТОВКИ КАДРОВ Уральского государственного технического уни верситета Кафедра микропр оцессорной те хники Курсовая работа Программа демонстрирующая иерар хию окон 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 -приложения на чинается с главной функ ции . Она содержит код , осуществляющий настройку (инициализацию ) приложе ния в среде операционной системы Wi ndows . Видимым для пользовател я резуль татом работы главной функции являетс я появление на экране графического объекта в виде окна . Последним действием кода г лавной функции является со здание цикла обработки сообщений . После его создания приложение становит ся пассивным и начинает взаимодействовать с внешним миром посредством специ альным образом оформленных данных — сообще ний . Обработка поступающих приложе нию сообщений осуществляется специальной функцие й , называемой оконной . Оконная функция уникальна тем , чт о может быть вызвана только из операционно й системы , а не из приложения , которое ее содержит . Таким образом , 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 Cre ateWindowExA:PROC <20> extrn ShowWindow:PROC <21> extrn UpdateWindow:PROC <22> extrn GetMessageA:PROC <23> extrn TranslateMessage:PROC <24> extrn DispatchMessageA:PROC <25> e xtrn ExitProcess:PROC <26> extrn PostQuitMessage:PROC <27> extrn DefWindowProcA:PROC <28> extrn PlaySoundA:PROC <29> extrn ReleaseDC:PROC <30> extrn Text OutA: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 PAINTS TRUCT <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 ) - получить ук азатель ;на блок с переменными окружения <64> ; call GetEnvironmentStringsA ; врегистре еах адрес <65> ; вызов VOIDGetStartupInfo ( LPSTARTUPINFO lpStartupInfo ) ; указатель ; на структуру STARTUPINFO <66> ; push offset lpStartupInfo <67> ; call GetStartupInfoA <68> ; вызов HMODULE GetModuleHandleA (LPCTSTR lpModuleName) <69> push NULL ;0->GetModuleHandle <70> call GetModuleHandleA ; получить значение базового адреса , <71> mov hIns t , eax ; no которому загружен модуль. <72> ;далее hInst будет использоваться в качестве дескри птора данного приложения <73> ;конец стартового кода <74> WinMain : <75>;о пределить класс окна ATOM RegisterClassEx ( CONST WNDCLASSEX * lpWndClassEx ), <76> ; где * lpWndClassEx - адрес структуры WndClassEx <77> ;для начала инициализируем по ля структуры WndClassEx <78> mov wcl . cbSize , typeWNDCLASSEX -.размер структуры : в wcl.cbCIZE <79> mov wcl.style,CS_HREDRAW+CS_VREDRAW <80> mov wcl.pfn WndProg,offsetWindowProg ; адрес оконной процедуры <81> mov wcl.cbCisExtra,0 <82> mov wcl.cbWndExtra,0 <83> mov eax , hInst <84> mov ;д искриптор приложения в поле hInstance структуры wcl <85> mov wcl.hInstance, eax <86> ; готовим вызов HICON LoadIcon (HINSTANCE hInstance, LPCTSTR lpIconName) <87> push IDI_APPLICATION ,- стандартный значок <88> push 0 ;NULL <89> саП LoadIconA <90> mov wcl.hIcon, eax ,- дескриптор значка в поле hIcon I ; структуры wcl <91> ; готовим вызов HCURSOR LoadCursorA (HINSTANCE hInstance, LPCTSTR M ;lpCursorName) <92> push IDC _ ARROW ,-стандартны й курсор - стрелка <93> push 0 <94> са ll LoadCursorA <95> mov wcl . hCursor , eax ;дескриптор курсора в поле hCursor ;структуры wc 1 <96> ;определим цвет ф она окна - белы й <97> ; готовим вызов HGDIOBJ GetStockObject(int fnObject) <98> push WHITE_BRUSH <99> саП GetStockObject <100> mov wcl.hbrBackground, eax <101> mov dword ptrwcl.lpszMenuName, 0 ; без главного меню <102> mov dwordptrwcl.lpszClassName,offs etszC1assName; имя ; класса окна <103> mov wcl.hIconSm, 0 <104> ; регистрируем класс окна - готовим вызов RegisterClassExA (&wndclass) <105> push offset wcl <106> саП RegisterClassExA <107> test ax , ах ;проверить на успех регистрации класса окна <108> jz end _ cyc 1_ msg ; неудача <109> ; создаем окно : <110> ;готовим вызов HWND CreateWindowExA ( DWORDdwExStyle , LPCTSTR 1 pClassName , <111> ; LPCTSTR 1pW1ndowName, DWORD dwStyle, int x, int у , int nWidth, |;int nHeight, <112> ; HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID ;lpParam) <113> push 0 ;lpParam <114> push hInst ;hInstance <115> push NULL ;menu <116> push NULL ;parent hwnd <117> push CW_USEDEFAULT ; высота окна <118> push CW_USEDEFAULT ; ширина окна <119> push CW _ USEDEFAULT ;координа та у левого верхнего угла ;окна <120> push CW _ USEDEFAULT ;координата х левого верхнего угла < 121> push WS _ OVERLAPPEDWINDOW ; стиль окна <122> push offset szTitleName ; строка заголовка о кна <123> push offset szClassName ; имя класса окна <124> push NULL <125> са ll CreateWindowExA <126> mov hwnd , ea x ;- дескриптор окна <127> ; показать окно : <128> ; готовим вызов BOOL ShowWindow ( HWND hWnd , int nCmdShow ) <129> push SW_SHOWNORMAL <130> push hwnd <131> call ShowWindow <132> ; перерисовываем содержимое окна <133> ; готовим в ызов BOOL UpdateWindow ( HWND hWnd ) <134> push hwnd <135> call UpdateWindow <136> ; запускае м цикл сообщений : <137> ; готовим вызов BOOL GetMessageA ( LPMSG lpMsg , HWND hWnd , <138> ; UINTwMsgFilterMin,UINTwMsgFilterMax) <1 39> cycl_msg: <140> push 0 <141> push 0 <142> push NULL <143> push offset message <144> cal 1 GetMessageA <145> cmp ах , 0 <146> je end_cycl_msg <147> ; трансляц ия ввода с клавиатуры <148> ; готовим вызов BOOL Trans1ateMessage( CONST MSG *lpMsg ) <149> push offset message <150> call TranslateMessage <151> ; отправим сообщение оконной процедуре <152> ; готовим вызов LONG D1spatchMessage( CONST MSG *lpmsg ) <153> push offset message <154> call DispatchMessageA <155> jmp cycl_msg <156> end _ cycl _ msg : <157> <158> ;выход из приложения <159> ; готовим вызов VOID ExitProcess ( UINT uExitCode ) <160> push NULL <161> call Ex itProcess <162> start endp <163> ; - - - - - - - - - - - - --WindowProc-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <164> WindowProc proc <165> argP0nwnd:DWORD, PPmes:DWORD, @@wparam:DWORD, @@lparam:DWORD <166> uses ebx , edi , es 1 ;эти регист ры обязательно должны сохраняться <167> local @@hdc:DWORD <168> cmp @@mes, WM_DESTROY <169> je wmdestroy <170> cmp @@mes, WM_CREATE <171> je wmcreate <172> cmp @@mes, WM_PAINT <173> je wmpaint <174> jmp default <175> wmcreate : <176> ; обозначим создание окна звуковым эффектом <177> ; готовим вызов функции BOOL PlaySound ( LPCSTR pszSound , HMODULE hmod , DWORD ;fdwSound ) < 178> push SND_SYNC+SND_FILENAME <179> push NULL <180> push offset playFileCreate <181> call PlaySoundA <182> mov eax , О ;возвращаемое значение - 0 <183> jmp exit_wndproc <184> wmpaint: <185> pu sh SND_SYNC+SND_FILENAME <186> push NULL <187> push offset playFIilePaint <188> call P1aySoundA <189>; получим контекст устройства HDC BeginPaint(HWND nwnd,LPPAINTSTRUCT;LPpAINT) <190> push offset ps <191> pus h @@hwnd <192> call BeginPaint <193> mov @@hdc,eax <194> ; выведем строку текста в окно BOOL TextOut( HDC hdc. int nXStart, int :nYStart. <195> ; LPCTSTR lpString, int cbString ) <196> push MesWindowLen <197> push offset MesWindow <198> push 100 <199> push 10 <200> push @@hdc <201> call TextOutA <202> :oc в o б o дитьк o н т e к c т BOOLEndPaint( HWNDhWnd, CONSTPAINTSTRUCT*lpPai <203> push offset ps <204> push @@ hdc <205> call EndPaint <206> mov еах ,0;возвращаемое значение-0 <207> jmp exit_wndproc <208> wmdestroy: <209> push SND_SYNC+SND_FILENAME <210> push NULL <211> push offset p layFileDestroy <212> call PlaySoundA <213> ; послать сообщение W М _ QUI Т <214> ; готовим вызов VOID PostQuitMessage( int nExitCode ) <215> push 0 <216> call PostQuitMessage <217> mov eax, О ; возвращаемое значение - 0 <218> jmp exit_wndproc <219> default : <220> ; обработка по умолчанию <221>; готовим вызов LRESULTDefWindowProc ( HWND hWnd , UINTMsg , <222> ; WPARAMwParam,LPARAMlParam) <223> push @@lparam <224> push @@wparam < 225> push @@mes <226> push @@nwnd <227> call DefWindowProcA <228> jmp exit_wndproc <229> ;... ... ... <230> exit_wndproc: <231> ret <232> WindowProc endp <233> end start 3. Иерархия окон Изучив по дисциплине «Сист емное программное обеспечение» написание окон Windows на язык е Assembler и рассматривая графическую оконную систему нельзя обойтись без подробного рассмотрения того , какие окна можно отображать на экране. Тип окна задается 32-битовым без з наковым целым числом , которое указывается тре тьим параметром вызова функции Create Window . Существует всего лишь три основных т ипа окон Window . 1 тип . Перекрывающиеся окна . Флаг WS _ OVERLAPPED . 2 тип . Вспомогательные окна . Фла г WS _ POPUP . 3 тип . Доче рние окна . . Фл аг WS _ CHILD . Для написания курсового проект а , который имеет тему «Программа демонстрирую щая иерархию окон Windows » были использованы именно эти типы окон. Нужно о них помнить следующее что : Перекрывающееся окно никогда не имеет родителя До чернее окно всегда имеет родите ля. Вспомогательное окно может иметь и не иметь родителя ; если оно имеет родителя , то все равно это не дочернее , а в спомогательное окно. И з всех концепций систе мы управления окнами наиболее фундаментальной является отношение предок / потомок / сосед . Как мы видели при описании структуры данных WND, каждое окно содержит логический но мер окна своего предка , логический номер с воего первого дочернего окна и логический номер следующего соседнего окна . Соседними являются окна , имеющ и е одинаковое родительское окно . В действительности значения HWND являются просто ближними указателями в ло кальной "куче " модуля USER, поэтому вы можете р ассматривать их как указатели связного списка , которые позволяют обходить пути в иерарх ии окон . Иерарх и я окон , создаваема я модулем USER, показана на рис .1. Иерархия окон обходится во всех трех направлениях - от предка к потомку , от потомка к предку и от соседа к соседу . Примеры обхода иерархии включают следующее : • При уничтожении окна модуль USER должен ун ичтожить всех его потомков , а т акже их потомков . USER обходит всю иерархию , и спользуя поля hWndChild и hWndNext- Напомним , логические ном ера окон являются просто ближними указателями в локальной "куче " модуля USER. • Когда происходит передача фокуса вво да при нажатии клавиши Tab между элементам и управления в окне диалога (которые являю тся потомками окна диалога ), указатели на соседнее окна (или поле hWndNext) соединяют друг с другом элементы управления . Кроме того , упорядочение окон в списке hWndChild и hW n dNext отражает Z-порядок окон на экране . Z- порядок представляет собой относительную позицию окон в третьем измерении (в направлении от экрана к вам ). Если вы щелчком кнопки мыши выбираете различные основные окна ; чтобы поместить их в вершину Z-порядка , их относительные позиции в списке hWndNext сдвигаются . Рис ..1 Иерархия окон , созданная модулем USER. • Когда с пом ощью щелчка кнопк и мыши вы выбираете диалоговое управляющее окно , это приводит к тому , что менеджер диалогов просмаривает цепочку указателей пре дка , чтобы посмотреть , необходимо ли сделать активным окно приложения верхнего уровня (о сновное ). В корне дерева окон находится desktop-окно . Это окно покрывает весь экран и всегда находится на вершине Z-порядка . Это означает , что оно всегда находится позади всех других окон . Desktop-окно является первым созданным окном , и это единственное окно в системе , которое н е имеет ок на родителя или владельца . (Окна-владельцы опис аны далее .) Окраска окна фона отвечает за "обои " Windows. Desktop-окно ничем особенным не выделяется в смысле установки специальных битов или т.п . Оно создается с битами стиля (обсужд аются ниже ) WS_PO PUP и WS_CLIPCHILDREN. Нет никакого недо кументированного бита стиля WS_DESKTOP. Вместо этого л огический номер desktop-окна сохраняется в глобальн ой переменной модуля USER с именем HWndDesktop. Когда системе управления окнами нужно знать , имеет ли она дело с desktop-окном , она просто сравнивает HWND, о котором идет речь , с HWndDesktop. Вы можете получить значение переменно й HWndDesktop, используя документированную API-функцию GetDesktopWindow(). ВЛАДЕНИЕ ОКНАМИ В Windows Наряду с отношением предок /потомок . W indows также поддерживает совершенно другое понятие владения . Каждое окно имеет поле в своей структуре данных , которое содержит логический номер окна , которое владеет этим окном . В отличии от отношения предок /по томок , отношение владения окна является одно н аправленным . Окну известен логически й номер его окна-владельца , но оно не з нает логических номеров окон , которыми оно владеет. Владелец окна - это окно , которое получ ает уведомления для окна , которым оно влад еет . Например , когда вы создаете окно меню WS_PO PUP с помощью функции TrackPopupMenu(), вы задаете владельца окна . Владелец окна получает со общение WM_COMMAND, порождаемое при выборе пункта меню . Важно отметить , что в общем случае ро дительское окно и владелец окна совершенно различны . Отношение предок / п отомок устанавливает , где в иерархии окон находитс я окно , тогда как владелец окна определяет , какие окна получают уведомления , предназначе нные для окон , которыми они владеют. Особенность вышеприведенного правила относит ся и к окнам WS_CHILD. Для окон WS_CH ILD владел ец HWND в структуре WND дочернего окна равен нул ю , и вместо него уведомительные сообщения посылаются родительскому окну . Например , кнопка в окне диалога является потомком главного диалогового окна . Когда вы нажимаете кноп ку , окно кнопки уведомля е т об этом событии своего предка , т.е . главное ди алоговое окно . Вы можете считать , что для ws_child-okhb логический номер hWndOwner — то же самое , что и hWndParenfc, хотя на самом деле они ра зличны . В Presentati on Manager нет необходимости в битах WS_CHILD или Р WS_POPUP. Заполняется как поле hWndPa-rent, так и поле hWndOwner. Это полностью определяет , кто получ ает уведомительные сообщения потомка , а также положение окна в иерархии . В Presentation Manager поля hWndParent и hWndOw- ner обычно содержат одно и то же знач ение HWND. Кроме посылки уведомлений своему владельц у , окно , которым владеют , также всегда расп оложено впереди окна-владельца . Если окно прев ращено в пиктограмму , то же происходит и с окнами , которыми оно владеет . Если о кно-владелец уничтожается, тто окна , которыми оно владеет , также уничтожаются . Так как окно не следит за окнами , которыми он о владеет , нужно просматривать списки указате лей предок /сосед и сравнивать владельца к аждого окна с HWND окна , которое уничтожается. Во всем этом немного стра нно то , что Windows не делает отношение владения оче нь явным . Хотя в документации SDK кратко расс матривается отношение владения , вам довольно трудно увидеть , в каких местах отношение в ладения отличается от отношения предок /потомо к . В Presentation Manager O S/2 при создании окна вы задаете и родительское окно , и окно-вла делец . В Windows вы задаете только предка. Если функции CreateWindow() передается только HWND родит еля , как тогда вам описать окно владельца в Windows? Одним из параметров функции CreateWindow () является битовая маска стиля . Если стиль окна WS_CHILD, параметр hWndParent интерпретируется как родительское окно . Однако , если вы задаете WS_OVERLAPPED или WS_POPUP, параметр hWndParent в действительность исп ользуется как владелец HWND, что позднее п р оясняется в некотором псевдокоде . Родительским окном для окон WS_OVERLAPPED или WS_POPUP всег да является HWND desktop-окна (HWndDes ktop). 3. «Программа демонстрирующая иерархию окон Windows » p 386; эта д иректива разрешает транслятору обрабатыва ть команды процессора i 386 jumps ;транслято р автоматически преобразует команду условной передачи управления ;в комбинацию условной и безусловной команды , если условная в силу ограниченност и ;области своего действия не обеспечивает передачу управления по н ужному адресу model flat , STDCALL ;выбирает модель памяти для 32-разрядного программирования и ;правила передачи параметров функции STDCALL , далее действующие по умолчанию UNICODE = 0 include win 32. inc ;файл , содержащ ий описание структур данных и констант ; some 32-bit constants and structures L equ < LARGE >; последовательности символов LARGE , являющейся им енем операции , объявляющей следующий за ней операнд 32-разрядным , присваивается имя L Define the external functions we will be linking to ; extrn BeginPaint : PROC ; описание импортируемых из Windows функций extrn CreateWindowExA:PROC extrn DefWindowProcA:PROC extrn DispatchMessageA:PROC extrn EndPaint:PROC extrn ExitProcess:PROC extrn GetMessageA:PROC extrn GetModuleHandleA:PROC extrn GetStockObject:PROC extrn InvalidateRect:PROC extrn LoadCursorA:PROC extrn LoadIconA:PROC extrn MessageBeep:PROC extrn MessageBoxA:PROC extrn PostQuitMessage:PROC extrn RegisterClassA:PROC extrn ShowWindow:PROC extrn SetWindowPos:PROC extrn TextOutA:PROC extrn TranslateMessage:PROC extrn UpdateWindow:PROC extrn FindFirstFileA : PROC . data ;предопр еделенное имя , означающее начало сегмента дан ных newhwnd dd 0 lppaint PAINTSTRUCT msg MSGSTRUCT wc WNDCLASS hInst dd 0 szTitleName db ' Это окно УГТУ ',0 szTitleName1 db 'Это окно группы СП -923',0 ; 'Каркасное приложение Win32 на асс емблере '.0 szClassName db 'ASMCLASS32',0 ; ' Приложение Win32 ’ Buffer db 'Привет из Нягани !',0 new1hwnd dd 0 MSG_L EQU 14 .code start: push L 0 call GetModuleHandleA ; get hmod (in eax) mov [hInst], eax ; hInstance is same as HMODULE ; in the Win32 world reg_class: ; ; initialize the WndClass structure ; Иинициализация сру ктуры 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_A RROW 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 szCl assName push offset wc call RegisterClassA push L 0 ; lpParam push [hInst] ; hInstance push L 0 ; 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 [newhwn d], eax push L SW_SHOWNORMAL push [newhwnd] call ShowWindow push [newhwnd] call UpdateWindow push L 0 ; lpParam push [hInst] ; hInstance push L 0 ; menu push L [newhwnd] ; 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 szTitleName1 ; Title string push offset szClassName ; Class name push L 0 ; extra style call CreateWindowExA mov [new1hwnd], eax push L SW_SHOWNORMAL push [new1hwnd] call ShowWindow push [new1hwnd] 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 ; ; WARNING: Win32 requires that EBX, EDI, and ESI be preserved! We comply ; with this by listing those regs after the 'uses' statement in the 'proc' ; line. This allows the Assembler to save them for us. ; 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 jmp defwndproc 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 L 17 ; push ecx push offset Buffer push L 5 push L 5 push [hDC] call TextOutA push offset lppaint push [hwnd] call EndPaint mov eax,0 jmp finish finish: ret WndProc endp ;----------------------------------------------------------------------------- public WndProc end start Библиографический список 1. Использование Turbo Assembler при разработке программ / Составитель А. А . Чекатков . Киев : Диалектика , 1995. 2. Рихтер Д . Windows для профессионалов ( программирование в Win 32 API для Windows NT 3.5 и Windows 95) пер . С англ . М .: Издательский отдел «Русский Редакция» ТОО « Channel Trading Ltd » , 1995. 3. Зубков С . В . Assembler. Для DOS, Windows и Unix. М . : ДМК . 1999.
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Экономическая теория

 Анекдоты - это почти как рефераты, только короткие и смешные Следующий
Жизнь показывает, что президентская власть в Америке передается по наследству, либо половым путем.
Anekdot.ru

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

Обратите внимание, реферат по программированию "Программа, демонстрирующая иерархию окон Windows", также как и все другие рефераты, курсовые, дипломные и другие работы вы можете скачать бесплатно.

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


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