For a 2 image solution, you subclass the button and respond in the subclass to the WM_LBUTTONUP and WM_LBUTTONDOWN messages.
You write a separate subclass for each button and have the bmp handles for each set with the two messages. The following example is 64 bit but the 32 bit versions work the same way.
Butn1Proc proc hWin:QWORD,uMsg:QWORD,wParam:QWORD,lParam:QWORD
.switch uMsg
.case WM_LBUTTONUP
rcall SendMessage,hButn1,BM_SETIMAGE,IMAGE_BITMAP,bImg1
.case WM_LBUTTONDOWN
rcall SendMessage,hButn1,BM_SETIMAGE,IMAGE_BITMAP,bImg2
.endsw
invoke CallWindowProc,lpButn1Proc,hWin,uMsg,wParam,lParam
ret
Butn1Proc endp
There is a 32 bit subclassing tool in the MASM32 SDK that makes doing subclasses a lot easier and saves time.