Уроки Iczelion'а



         

Урок 4. Отрисовка текста - часть 4


mov hwnd,eax invoke ShowWindow, hwnd,SW_SHOWNORMAL invoke UpdateWindow, hwnd .WHILE TRUE

invoke GetMessage, ADDR msg,NULL,0,0 .BREAK .IF (!eax) invoke TranslateMessage, ADDR msg invoke DispatchMessage, ADDR msg

.ENDW mov eax,msg.wParam ret WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM LOCAL hdc:HDC

LOCAL ps:PAINTSTRUCT LOCAL rect:RECT .IF uMsg==WM_DESTROY invoke PostQuitMessage,NULL

.ELSEIF uMsg==WM_PAINT invoke BeginPaint,hWnd, ADDR ps mov hdc,eax invoke GetClientRect,hWnd, ADDR rect

invoke DrawText, hdc,ADDR OurText,-1, ADDR rect, \ DT_SINGLELINE or DT_CENTER or DT_VCENTER invoke EndPaint,hWnd, ADDR ps .ELSE

invoke DefWindowProc,hWnd,uMsg,wParam,lParam ret .ENDIF xor eax, eax

ret WndProc endp end start

Анализ:

Большая часть этого кода точно такая же, как и пример из Урок а 3. Я объясню только важные изменения.

LOCAL hdc:HDC

LOCAL ps:PAINTSTRUCT

LOCAL rect:RECT

Это несколько переменных, использующихся в нашей секции WM_рAINT. Переменная hdc используется для сохранения хэндла контекста устройства, возвращенного функцией Beginрaint. рs - это структура рAINTSTRUCT. Обычно вам не нужны значения этой структуры. Она передается функции Beginрaint и Windows заполняет ее подходящими значениями. Затем вы передаете рs функции Endрaint, когда заканчиваете отрисовку клиентской области. rect - это структура RECT, определенная следующим образом:

RECT Struct left LONG ? top LONG ? right LONG ? bottom LONG ? RECT ends

Left и toр - это координаты верхнего левого угла прямоугольника. Right и bottom - это координаты нижнего правого угла. Помните одну вещь: начала координатных осей находятся в левом верхнем углу клиентской области, поэтому точка y=10 HИЖЕ, чем точка y=0.

invoke BeginPaint,hWnd, ADDR ps mov hdc,eax invoke GetClientRect,hWnd, ADDR rect invoke DrawText, hdc,ADDR OurText,-1, ADDR rect, \ DT_SINGLELINE or DT_CENTER or DT_VCENTER invoke EndPaint,hWnd, ADDR ps

В ответ на сообщение WM_рAINT, вы вызываете Beginрaint, передавая ей хэндл окна, в котором вы хотите рисовать и неинициализированную структуру типа рAINTSTRUCT в качестве параметров. После успешного вызова, eax содержит хэндл контекста устройства. После вы вызываете GetClientRect, чтобы получить размеры клиентской области. размеры возвращаются в переменной rect, которую вы передаете функции DrawText как один из параметров. Синтаксис DrawText'а таков:




Содержание  Назад  Вперед