Ok, so here is very basic way to use GDI to set pixel color...
format PE GUI 4.0
entry WinMain
include 'WIN32A.INC'
section '.code' code readable executable
WinMain:
invoke GetModuleHandle,NULL
mov [wndclass.hInstance],eax
invoke LoadIcon,0,IDI_APPLICATION
mov [wndclass.hIcon],eax
invoke LoadCursor,NULL,IDC_ARROW
mov [wndclass.hCursor],eax
invoke RegisterClassEx,wndclass
invoke CreateWindowEx,WS_EX_OVERLAPPEDWINDOW,szAppName,szAppName,\
WS_OVERLAPPEDWINDOW+WS_VISIBLE,CW_USEDEFAULT,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,[wndclass.hInstance],NULL
.mainloop:
invoke GetMessage,msg,NULL,0,0
cmp eax,0
jle .finished
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp .mainloop
.finished:
invoke ExitProcess,[msg.wParam]
proc WindowProc hwnd,umsg,wparam,lparam
local ps:PAINTSTRUCT
mov eax,[umsg]
cmp eax,WM_PAINT
je .wmpaint
cmp eax,WM_DESTROY
je .wmdestroy
.defwndproc:
invoke DefWindowProc,[hwnd],[umsg],[wparam],[lparam]
jmp .finish
.wmpaint:
lea eax,[ps]
invoke BeginPaint,[hwnd],eax
invoke SetPixel,[ps.hdc],10,10,0x00000000 ; paint black pixel at [x,y]
lea eax,[ps]
invoke EndPaint,[hwnd],eax
jmp .zfinish
.wmdestroy:
invoke PostQuitMessage,0
.zfinish:
xor eax,eax
.finish:
ret
endp
section '.data' data readable writeable
szAppName db 'dib',0
wndclass WNDCLASSEX sizeof.WNDCLASSEX,CS_OWNDC,WindowProc,\
0,0,NULL,NULL,NULL,(COLOR_WINDOW+1),NULL,szAppName,NULL
msg MSG
section '.idata' import data readable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL',\
gdi32,'GDI32.DLL'
include 'API\KERNEL32.INC'
include 'API\USER32.INC'
include 'API\GDI32.INC'