Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Листинг 5.3. Программа DRAWTEXT, в которой используются только команды ассемблера DRAWTEXT.ASM (классический стиль)
.386
.model flat, stdcaii
option casemap :none ; различаем регистр символов
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\gdi32.lib
; WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO .-DWORD, : DWORD, : DWORD, :DWORD
.data
szDisplayName DB "КОНТЕКСТ УСТРОЙСТВА И ВЫВОД ТЕКСТА (ВАРИАНТ 2)", О CommandLine DD О
hWnd DD О
hlnstance DD О
szClassName DB "Demo_Class", 0
textDraw DB " ", 0
lenText EQU $-textDraw
. code
start:
push NULL

call GetModuleHandle
mov hlnstance, EAX
call GetCommandLine
mov CommandLine, EAX
push SW_SHOWDEFAULT
push CommandLine
push NULL
push hlnstance
call WinMain
push EAX
call ExitProcess
WinMain proc hlnst :DWORD,
hPrevInst :DWORD,
CmdLine :DWORD,
CmdShow :DWORD

Локальные переменные процедуры
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
Заполнение структуры WNDCLASSEX требуемыми параметрами
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, offset WndProc
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
push hlnst
pop wc.hlnstance
mov wc.hbrBackground, COLOR_BTNFACE+1
mov wc.IpszMenuName, NULL
mov wc.IpszClassName, offset szClassName
push IDI_APPLICATION
push NULL
call Loadlcon
mov wc.hlcon, EAX
254 Глава 5
push IDC_ARROW
push NULL
call LoadCursor
mov wc.hCursor, EAX
mov wc.hlconSm, 0
lea EAX, wc
push EAX
call RegisterClassEx push NULL
push hlnst
push NULL
push NULL
push CW_USEDEFAULT
push CWJJSEDEFAULT
push CWJJSEDEFAULT
push CWJJSEDEFAULT
push WS_ OVERLAPPEDWINDOW
push offset szDisplayName
push offset szClassName
push WS_EX_OVERLAPPEDWINDOW
call CreateWindowEx
mov hWnd,EAX
push SW_SHOWNORMAL
push hWnd
call ShowWindow
push hWnd
call Updatewindow

; Цикл обработки сообщений
StartLoop:
push 0
push 0
push NULL
lea EAX, msg
push EAX
call GetMessage
cmp EAX, 0
je ExitLoop
lea ЕАХ, msg
push EAX
call TranslateMessage
lea EAX, msg
push EAX
call DispatchMessage
jmp StartLoop
ExitLoop:
WinMain endp
WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
LOCAL hdc :HDC
LOCAL ps :PAINTSTRUCT
LOCAL rect :RECT
LOCAL coord :DWORD ; используется для хранения
; параметров форматирования

; Обработчик нажатия левой кнопки мыши
cmp DWORD PTR [EBP+I2], WM_LBUTTONDOWN jne next_l
push hWnd
call GetDC
mov hdc, EAX
lea ESI,rect
push hWnd
call GetClientRect
mov coord, DT_CENTER or DT_SINGLELINE or DT_VCENTER
push coord
lea ESI, rect
push ESI
push -1
push offset textDraw
push hdc
call DrawText
push hdc
push hWnd
call ReleaseDC
ret
next_l:
cmp DWORD PTR [EBP+12], WM_DESTROY jne next_2
push NULL
call PostQuitMessage
xor EAX, EAX
ret
next_2:
push lParam
push wParam
push uMsg
push hWin
call DefWindowProc
ret
WndProc
endp


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru