invoke TranslateMessage, ADDR msg invoke
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'а таков:
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий