Hello everyone,
I'm playing around the examples of the masm32 package, in particular with the example1\COMCTLS directory.
I was trying to add some functionality to the prog to start learning masm32.
In particular I wanted to add the GetOpenFileName function to the "Open File" toolbar button.
I've added the next lines after including the comdlg32.inc and comdlg32.lib :
WndProc proc ..... etc
.
.
.
LOCAL of :OPENFILENAME
mame dd ?
szText FileDialogTitle,"Open File..."
mov of.lStructSize,SIZEOF OPENFILENAME
mov of.hWndOwner,hWin
mov of.hInstance,0
mov of.lpstrFilter,0
mov of.lpstrCustomFilter,0
mov of.nMaxCustFilter,0
mov of.nFilterIndex,0
mov of.lpstrFile,0
mov of.nMaxFile,0
mov of.lpstrFileTitle,OFFSET mame
mov of.nMaxFileTitle,0
mov of.lpstrInitialDir,0
mov of.lpstrTitle,OFFSET FileDialogTitle
mov of.Flags,OFN_EXPLORER
mov of.nFileOffset,0
mov of.nFileExtension,0
mov of.lpstrDefExt,0
mov of.lCustData,0
mov of.lpfnHook,0
mov of.lpTemplateName,0
.
.
.
.elseif wParam == 51
szText tb51,"Open File"
invoke SendMessage,hStatus,SB_SETTEXT,0,ADDR tb51
invoke MessageBox,hWin,ADDR tb51,ADDR tbSelect,MB_OK
invoke GetOpenFileName , ADDR of
problem 1 : mov of.hWndOwner,hWin not working I have to put 0 (zero)
problem 2 : when I have the EXE compiled and launched It crashes.
I hope I have explained all clearly.
Can anyone help ? thanks !
Problem1 is because you cannot do mem->mem transactions!
You can do either of the following:
push hWin
pop of.hWndOwner
--- OR ---
mov eax, hWin
mov of.hWndOwner, eax
Although technically pushing is a mem->mem transaction (as is the subsequent pop), they are specail cases, and are allowed!
The second option (via eax) is faster, but will destroy the value in eax, and so may be less favourable (you can also use any other general purpose register of course).
Mirno
ok, I've solved the problem :)thanks !