By the way, here's the original FASM code, if you want to see it:
format PE GUI 4.0
entry start
include 'win32a.inc'
ID_ST1 = 101
ID_ST2 = 102
ID_ED1 = 103
; Цвета текста и фона элементов
clrFore = 00FF00FFh
clrBack = 0012FFFFh
; Цвет фона главного окна
clrMain = 0012FFFFh
;---------------------------------------------
section '.data' data readable writeable
hBrushBack dd ?
len dd ?
buff rb 100h
hPen dd ?
hBrush dd ?
; Item LPDRAWITEMSTRUCT
;---------------------------------------------
section '.code' code readable executable
start:
invoke GetModuleHandle,0
invoke DialogBoxParam,eax,1,HWND_DESKTOP,DialogProc,0
invoke ExitProcess,0
proc DialogProc hwnddlg,msg,wparam,lparam
push ebx esi edi
cmp [msg],WM_INITDIALOG
je wminitdialog
cmp [msg],WM_COMMAND
je wmcommand
cmp [msg],WM_CLOSE
je wmclose
cmp [msg],WM_LBUTTONDOWN
je drag
cmp [msg],WM_DRAWITEM
je color_button
xor eax,eax
jmp processed
color_button:
; Указатель на структуру DRAWITEMSTRUCT
mov ebx,[lparam]
; Установить режим смешивания фоновых цветов
invoke SetBkMode,[ebx+DRAWITEMSTRUCT.hDC],TRANSPARENT
; Кнопка активна?
test [ebx+DRAWITEMSTRUCT.itemState],ODS_SELECTED
jz @f
invoke GetSysColor,COLOR_ACTIVEBORDER
invoke CreatePen,PS_SOLID,1,eax
invoke SelectObject,[ebx+DRAWITEMSTRUCT.hDC],eax
invoke GetSysColor,COLOR_3DLIGHT
invoke CreateSolidBrush,eax
invoke SelectObject,[ebx+DRAWITEMSTRUCT.hDC],eax
; Прямоугольник с заливкой
invoke Rectangle,[ebx+DRAWITEMSTRUCT.hDC],\
[ebx+DRAWITEMSTRUCT.rcItem.left],\
[ebx+DRAWITEMSTRUCT.rcItem.top],\
[ebx+DRAWITEMSTRUCT.rcItem.right],\
[ebx+DRAWITEMSTRUCT.rcItem.bottom]
jmp loc_text
@@:
; Установить цвет и стиль рамки
invoke GetSysColor,COLOR_3DDKSHADOW
invoke CreatePen,PS_SOLID,3,eax
invoke SelectObject,[ebx+DRAWITEMSTRUCT.hDC],eax
; Установить цвет фона
invoke GetSysColor,COLOR_HIGHLIGHT
invoke CreateSolidBrush,eax
invoke SelectObject,[ebx+DRAWITEMSTRUCT.hDC],eax
; Прямоугольник с заливкой
invoke Rectangle,[ebx+DRAWITEMSTRUCT.hDC],\
[ebx+DRAWITEMSTRUCT.rcItem.left],\
[ebx+DRAWITEMSTRUCT.rcItem.top],\
[ebx+DRAWITEMSTRUCT.rcItem.right],\
[ebx+DRAWITEMSTRUCT.rcItem.bottom]
loc_text:
; Длина надписи на кнопке
invoke GetWindowTextLength,[ebx+DRAWITEMSTRUCT.hwndItem]
inc eax
mov [len],eax
invoke GetWindowText,[ebx+DRAWITEMSTRUCT.hwndItem],buff,[len]
; Установить цвет текста
invoke SetTextColor,[ebx+DRAWITEMSTRUCT.hDC],0x0000FFFF
; Для нажатой кнопки сдвинуть текст вниз-вправо
test [ebx+DRAWITEMSTRUCT.itemState],ODS_SELECTED
jz @f
; Установить цвет текста
invoke SetTextColor,[ebx+DRAWITEMSTRUCT.hDC],0x000000FF
add [ebx+DRAWITEMSTRUCT.rcItem.left],2
add [ebx+DRAWITEMSTRUCT.rcItem.top],2
@@:
; Надпись на кнопке
lea esi,[ebx+DRAWITEMSTRUCT.rcItem]
invoke DrawText,[ebx+DRAWITEMSTRUCT.hDC],buff,[len],esi,\
DT_SINGLELINE+DT_VCENTER+DT_CENTER
jmp processed
drag:
invoke ReleaseCapture
invoke SendMessage,[hwnddlg],WM_SYSCOMMAND,61458,0
jmp processed
wminitdialog:
jmp processed
wmcommand:
cmp [wparam],BN_CLICKED shl 16 + IDCANCEL
je wmclose
jmp processed
wmclose:
invoke DeleteObject,[hBrushBack]
invoke EndDialog,[hwnddlg],0
processed:
pop edi esi ebx
ret
endp
;---------------------------------------------
section '.idata' import data readable writeable
library kernel32,'kernel32.dll',\
user32,'user32.dll',\
gdi32,'gdi32.dll'
include 'apia\kernel32.inc'
include 'apia\user32.inc'
include 'apia\gdi32.inc'
;---------------------------------------------
section '.rsrc' resource data readable
directory RT_DIALOG,dialogs
resource dialogs,\
1,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
dialog demonstration,'Color Button Demo',0,0,190,55,WS_CAPTION+WS_SYSMENU+DS_CENTER+DS_SYSMODAL
dialogitem 'BUTTON','',-1, 2, -1, 185, 35,WS_VISIBLE+BS_GROUPBOX
dialogitem 'BUTTON','Button',-1,80,37,50,15,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON+BS_OWNERDRAW
dialogitem 'BUTTON','Exit',IDCANCEL,135,37,50,15,WS_VISIBLE+WS_TABSTOP+BS_PUSHBUTTON
enddialog