Region GetDCExFlags
Const DCX_WINDOW=&H1
Const DCX_CACHE=&H2
Const DCX_NORESETATTRS=&H4
Const DCX_CLIPCHILDREN=&H8
Const DCX_CLIPSIBLINGS=&H10
Const DCX_PARENTCLIP=&H20
Const DCX_EXCLUDERGN=&H40
Const DCX_INTERSECTRGN=&H80
Const DCX_EXCLUDEUPDATE=&H100
: Message WM_NCPAINT
HDC hdc
RECT Winrect
HBRUSH b
HPEN pe
hdc=GetDCEx(hwnd
HRGN)wParam,DCX_WINDOW Or DCX_CACHE Or)
(DCX_INTERSECTRGN Or DCX_LOCKWINDOWUPDATE
GetWindowRect hwnd,Winrect
((b=CreateSolidBrush(RGB(0,180,180
SelectObject hdc,B
(pe=CreatePen(PS_SOLID,1,RGB(90, 90, 90
SelectObject hdc,pe
Rectangle hdc,0,0,(rect.right-rect.left),(rect.bottom
(rect.top-
DeleteObject pe
DeleteObject B
ReleaseDC hwnd,hdc
RedrawWindow hwnd,Winrect
(HRGN)wParam,RDW_UPDATENOW,
return 0
NC_Paint is better because it will only paint when needed.
WM_NCPAINT
(DefWindowProc(hwnd, msg, wparam, lparam
let the defaultWNDPROC handle most of it'
(hdc = GetWindowDC(hwnd
Rectangle hdc,150,3,250,23) 'then draw in your button
("TextOutW hdc,153,4,"New Button",10
ReleaseDC hwnd, hdc
return 0
Step 4: the Window Procedure
WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
Select Case msg
case WM_CLOSE
DestroyWindow hwnd
case WM_NCHITTEST
if(CallWindowProc(OldProc,hwnd,msg,wParam,lParam)=HTCAPTION) Then
return 0
else
CallWindowProc hwnd, msg,wParam, lParam
End if
case WM_NCCALCSIZE
if(wParam=TRUE) Then
LPNCCALCSIZE_PARAMS lpncsp = (LPNCCALCSIZE_PARAMS)lParam
lpncsp.rgrc(0).left += 5
lpncsp.rgrc(0).top += 100
lpncsp.rgrc(0).right -= 5
lpncsp.rgrc(0).bottom -= 5
return 0
else
CallWindowProc OldProc,hwnd, msg, wParam, lParam
End if
case WM_NCLBUTTONDBLCLK
return NULL
break;
case WM_NCLBUTTONUP
return NULL
break
case WM_DESTROY
PostQuitMessage 0
break
case WM_NCACTIVATE
////// what i do here.'
return FALSE
break
case WM_NCPAINT
m=(HRGN)wParam
hdic=GetDCEx(hwnd,(HRGN)wParam,DCX_WINDOW
(Or DCX_CACHE Or DCX_INTERSECTRGN
GetWindowRect hwnd,Winrect
((b=CreateSolidBrush(RGB(180,180,180
SelectObject hdic,b
((pe=CreatePen(PS_SOLID,1,RGB(90, 90, 90
SelectObject hdic,pe
Rectangle hdic,0,0,(rect.right-rect.left),(rect.bottom-rect.top)
DeleteObject pe
DeleteObject b
ReleaseDC hwnd,hdic
RedrawWindow hwnd,Winrect,(HRGN)wParam,RDW_UPDATENOW
return 0