| « Поставить закладку » « Сделать стартовой » | |||
|
|||
| Статьи:: Assembler :: Создание окна
Создание окнаОсновные шаги при создании окна:
Разберем простую программу, которая выводит только окно. Я взял пример программы Wap32.asm из пакета TASM и несколько упостил ее. .386 .model flat, stdcall include win32.inc Файл win32.inc содержит некоторые нужные константы и структуры extrn CreateWindowExA:PROC extrn DefWindowProcA:PROC extrn DispatchMessageA:PROC extrn ExitProcess:PROC extrn GetMessageA:PROC extrn GetModuleHandleA:PROC extrn LoadCursorA:PROC extrn LoadIconA:PROC extrn PostQuitMessage:PROC extrn RegisterClassA:PROC extrn ShowWindow:PROC extrn TranslateMessage:PROC extrn UpdateWindow:PROC .data newhwnd dd 0 msg MSGSTRUCT <?> wc WNDCLASS <?> hInst dd 0 szTitleName db 'Win32 Assembly Program',0 szClassName db 'ASMCLASS32',0 .code start: push 0 call GetModuleHandleA mov [hInst], eax Получим дискриптор программы. Далее инициализируем структуру WndClass для регистрации окна mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW + CS_GLOBALCLASS clsStyle - определяет стиль класса mov [wc.clsLpfnWndProc], offset WndProc clsLpfnWndProc - указывает на процедуру окна mov [wc.clsCbClsExtra], 0 mov [wc.clsCbWndExtra], 0 mov eax, [hInst] mov [wc.clsHInstance], eax clsHInstance - содержит дискриптор программы push IDI_APPLICATION push 0 call LoadIconA mov [wc.clsHIcon], eax push IDC_ARROW push 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 clsLpszClassName - определяет имя класса окна push offset wc call RegisterClassA Создаем окно: push 0 push [hInst] ; дискриптор окна push 0 push 0 push CW_USEDEFAULT ; высота push CW_USEDEFAULT ; ширина push CW_USEDEFAULT ; y push CW_USEDEFAULT ; x push WS_OVERLAPPEDWINDOW ; стиль push offset szTitleName ; заголовок окна push offset szClassName ; имя класса push 0 ; дополнительный стиль call CreateWindowExA mov [newhwnd], eax newhwnd - дискриптор окна Покажем окно: push SW_SHOWNORMAL push [newhwnd] call ShowWindow Обновим окно: push [newhwnd] call UpdateWindow Создаем цикл для обработки сообщений окна msg_loop: push 0 push 0 push 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 Процедура окна: WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD Win32 требует, чтобы EBX, EDI, и ESI были сохранены cmp [wmsg], WM_DESTROY je wmdestroy push [lparam] push [wparam] push [wmsg] push [hwnd] call DefWindowProcA jmp finish wmdestroy: push 0 call PostQuitMessage mov eax, 0 finish: ret WndProc endp ends end start На первый взгляд кажется, что слишком много написано для простой программы. На самом же деле писать все полностью не нужно, достаточно написать файл один раз, а потом использовать его как шаблон для своих новых программ. Можно создать объектный файл и использовать его как загрузочный код, а писать только процедуру окна(WinProc). Рубрика: Assembler
Google Developer Day 2008 в Москве.
Дата проведения: 28 октября 2008 г.; Место проведения: Амбер Плаза, Москва, Россия. Конференция для веб-разработчиков и разработчиков мобильных приложений в Москве. Узнайте, как наилучшим образом использовать инструменты разработки и API от Google, чтобы создавать социальные, мобильные и картографические приложения, как использовать AJAX/JavaScript инструменты и библиотеки от Google и многое другое из первых уст.
Подробнее... |
Рубрика: Мероприятия
| Добавлено: 05.09.2008
ТОП 10 самых раздражающих факторов для программиста.
Совсем недавно наткнулся в интернете на забавный "хит-парад" наиболее раздражающих вещей для программиста. Поскольку он был на английском — решил перевести текст и несколько адаптировать к нашим реалиям…
Подробнее... |
Рубрика: Разное
| Добавлено: 03.09.2008
Windows Server 7, 8 и 9.
Подробнее... |
Рубрика: Windows Server 2003
| Добавлено: 03.09.2008
Остальные статьи:
jQuery для JavaScript-программистов
Инновационный веб-броузер Google Chrome стартует уже сегодня
Windows 7: подход к производительности системы
Trac + Subversion @ Ubuntu: Revisited
[g]Vim в режиме Python: Рекомпиляция в Windows
Java + JSON. Пути к дружбе
Драйвер SQL Server 2005 для PHP
Типы данных в MySQL (сжатый справочник для PHP программиста)
PHP класс для работы с Яндекс.XML
Ошибки начинающих PHP разработчиков
Наследование шаблонов в Smarty
Особенности хранения сессий PHP в memcached
Internet Explorer 8 beta 2
9 правил для начинающего Ajax-разработчика
ExtJS 2.2 - полная поддержка Firefox 3, новые виджеты и другие нововведения
Windows 7: под покровом тайны |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|