· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Перекрывание DC

Посл.отвђт Сообщенiе


Дата: Апр 2, 2004 11:28:26

Как можно рисовать поверх всех окон, включая OPENGL/DIRECTX игры? Пробовал находить DC окон и копировать в него, но рисуется только черный прямоугольник.


Дата: Апр 2, 2004 14:50:55

покажи исходник (или) часть, где ты рисуешь прямоугольник. возможно там что-то не так, в результате ты и видишь лишь прямоугольник.


Дата: Апр 2, 2004 19:46:29

;Это только пример, рисую я в определенные окна. Это не очень хороший способ (к тому же неработающий). Лучше, если само окно будет выше всех.

.386
.model flat, stdcall
option casemap :none

;ПРОТОТИПЫ ###################################################################### #################################

INCLUDE \lab\masm\include\windows.inc
INCLUDE \lab\masm\include\kernel32.inc
INCLUDE \lab\masm\include\user32.inc
INCLUDE \lab\masm\include\gdi32.inc

INCLUDELIB \lab\masm\lib\kernel32.lib
INCLUDELIB \lab\masm\lib\user32.lib
INCLUDELIB \lab\masm\lib\gdi32.lib

;СЕКЦИЯ НЕОПРЕД ДАННЫХ ###################################################################### #####################

.DATA?

hwnd HWND ?
TopHWND HWND ?
TopDC HDC ?
msg MSG <>
timer_handle HWND ?
hFont dd ?
hOld dd ?
hWdc HDC ?
hDC dd ?
ps PAINTSTRUCT <>
lf LOGFONT <>

;СЕКЦИЯ ДАННЫХ ###################################################################### #############################

.DATA

szCount db " ", 0
count db 0

;СТРУКТУРА WNDCLASSEX ###################################################################### ######################

cbSize dd 12*4
style dd CS_HREDRAW or CS_VREDRAW
lpfnWndProc dd OFFSET WndProc
cbClsExtra dd NULL
cbWndExtra dd NULL
hInstance dd 400000h
hIcon dd NULL
hCursor dd 65553
hbrBackground dd COLOR_WINDOWFRAME
lpszMenuName dd NULL
lpszClassName dd OFFSET szClassName
hIconSm dd NULL

;СЕКЦИЯ КОНСТАНТ ###################################################################### ###########################

.CONST

FontName db "MS Sans Serif", 0
FormatTMSH db "%lu ", 0
szClassName db "Demo Class", 0
szAppName db "Demo APP", 0

timer_num equ 10

BUTTONCLASS db "BUTTON", 0

;СЕКЦИЯ КОДА ###################################################################### ###############################

.CODE

start:

invoke RegisterClassEx, ADDR cbSize



invoke CreateWindowEx, 000088h, ADDR szClassName , ADDR szAppName , WS_POPUP or WS_CLIPCHILDREN, \
100, 100 , 45 , 12 , NULL , NULL , hInstance , NULL
mov hwnd, eax

mov eax, 1000
invoke SetTimer, hwnd, timer_num, eax, NULL
mov timer_handle, eax

invoke ShowWindow, hwnd, SW_NORMAL
invoke UpdateWindow, hwnd
invoke SetFocus, hwnd

StartLoop:
invoke GetMessage, ADDR msg, NULL, NULL, NULL
or eax, eax
jz ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
NoMsg:
jmp StartLoop
ExitLoop:
invoke ExitProcess, NULL
ret

;ПРОЦЕДУРА ОБРАБОТКИ СООБЩЕНИЙ ###################################################################### #############
WndProc proc hWnd:HWND , uMsg:UINT, wParam:WPARAM, lParam:LPARAM
;##################################################################### ############################################

cmp uMsg, WM_CLOSE
je wmClose

cmp uMsg, WM_PAINT
je wmPaint

cmp uMsg, WM_TIMER
je wmTimer

cmp uMsg, WM_MOUSEMOVE
je wmMousemove

invoke DefWindowProc, hWnd, uMsg, wParam, lParam
ret

;===================================================================== ============================================
wmPaint:
invoke BeginPaint, hWnd, ADDR ps
mov hWdc, eax

invoke lstrcpy, addr lf.lfFaceName, addr FontName
mov lf.lfHeight, -10
mov lf.lfWeight, 400

invoke CreateFontIndirect, addr lf
mov hFont, eax

invoke SelectObject, hWdc, hFont
mov hOld, eax

invoke TextOut, hWdc, 5, -1, ADDR szCount, 4

invoke SelectObject, hWdc, hOld
invoke DeleteObject, hFont

invoke GetTopWindow, NULL
mov TopHWND, eax

invoke GetWindowDC, TopHWND
mov TopDC, eax

invoke GetStockObject, BLACK_BRUSH
invoke DrawState, TopDC, eax, NULL, addr szCount, 0, 0, 0, 45, 12, DSS_NORMAL + DST_TEXT

invoke EndPaint, hWnd, ADDR ps
xor eax, eax
ret

;===================================================================== ============================================
wmMousemove:

cmp wParam, MK_LBUTTON
jne noBut
invoke SendMessageA, hWnd, WM_NCLBUTTONDOWN, HTCAPTION, NULL
noBut:

ret

;===================================================================== ============================================
wmTimer:

; invoke BringWindowToTop, hWnd
invoke ShowWindow, hWnd, SW_SHOW

invoke wsprintf, ADDR szCount, ADDR FormatTMSH, count

inc count
invoke InvalidateRect, hWnd,NULL,TRUE

ret

;===================================================================== ============================================

wmClose:

invoke DeleteDC, hWdc
invoke PostQuitMessage,NULL
ret

;===================================================================== ============================================

WndProc endp

;===================================================================== ============================================

end start


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.052