Ok, I tried this:
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
wc WNDCLASSEX <>
msg MSG <>
hWnd HWND ?
uMsg UINT ?
wParam WPARAM ?
lParam LPARAM ?
....
WinMain proc ;nothing here
;get rid of LOCALS
...works fine...
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
...works fine...
I change that to:
WndProc proc ;nothing here
and it compiles ok but no window comes up. I'm using ICZ Tut3 for sample. I think it has something to do with the way that the data is setup
Any help would be apprecieated
You can learn and try this..
..and forget about WndProc..just copy&paste!
You will work with MainMessages only!
Good luck
.data
ALIGN 4
MainMessages DD WM_COMMAND, OnCommand
DD WM_CREATE, OnCreate
DD WM_DESTROY, OnDestroy
DD WM_PAINT, OnPaint
....
....
nMessages DD $-MainMessages
.code
WndProc PROC ;
mov eax, nMessages ;u
mov ecx, offset MainMessages ;v
shr eax, 3 ;u get number of messages to do
mov edx, ;v get uMsg in edx
WndProc_1: ;
dec eax ;u
jl DefWindowProc ;v l=message not found
cmp ,edx ;u see if its the correct message
jnz WndProc_1 ;v no
push esp ;u save registers as required by Windows
push ebp ;v
push ebx ;u
push edi ;v
push esi ;u
call dword ptr ;v
;call correct procedure for the message
;now =hwnd,=umsg,=wparam,=lparam
pop esi ;u
pop edi ;v
pop ebx ;u
pop ebp ;v
pop esp ;u
jc DefWindowProc ;v nc=don't call DefWindowProcA eax=exit code
;
pop edx ;u
pop ecx ;v
pop ebx ;u
pop ecx ;v
pop ebx ;u
push edx ;v
ret ;ret 16
WndProc ENDP ;
I can't seem to get it working so I'm just gonna settle with local for now until I understand windows a little better :)
The hWnd in
.data?
hWnd HWND ?
and
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
are two different data areas.
Although the assembler and linker are aware of the hWnd in .data?, Windows isn't.
The data known as wParam and lParam are sent to your WndProc on the stack, and .data? does not contain stack data. In fact, with the original WndProc PROC declaration, the assembler will convert hWnd to DWORD PTR , uMsg to DWORD PTR , wParam to DWORD PTR , and lParam to DWORD PTR .
This message was edited by tank, on 5/29/2001 8:33:58 PM