Hi Chris,
I attached your ImgButtonX.o2bas, slightly modified.
When creating the dialog, the number of controls is the first argument, in this case: Dialog( 2, ... . The constant % review can be uncommented, this opens a console window with some statements if something goes wrong.
hInstance is defined as GetModuleHandle(null), so this should work for LoadIcon or LoadImage too. Win32 says the MapDialogRect function converts units to pixels, so I used this. I assume it could also be done as a macro or a function.
I am still not sure how the button should behave. I expected that it should react like a PushButton with an image but I do not get the feeling of a Pushbutton. I suppose there must be done some investigation. This is the interesting part if you do not use ready-to-use functions.
Roland