Dex4u
Joined: 08 Feb 2005
Posts: 1601
Location: web
|
First i would like to point out, i do not do alot of windows programming, but i written some basic code for user input.
Which worked fine, untill i did a windows (XP home) update, then all that happened was there was a empty window.
Here is some of the code that stops work (or disapears as in it just came up as a empty windows box).
format PE GUI 4.0
entry start
include '%include%\win32a.inc'
section '.data' data readable writeable
_title db 'Win32 program template',0
_class db 'FASMWIN32',0
_class_cb db 'COMBOBOX',0
_class_cb1 db 'COMBOBOX1',0
mainhwnd dd ?
hinstance dd ?
hwnd_cb dd ?
msg MSG
wc WNDCLASS
section '.code' code readable executable
start:
invoke GetModuleHandle,0
mov [hinstance],eax
invoke LoadIcon,0,IDI_APPLICATION
mov [wc.hIcon],eax
invoke LoadCursor,0,IDC_ARROW
mov [wc.hCursor],eax
mov [wc.style],0
mov [wc.lpfnWndProc],WindowProc
mov [wc.cbClsExtra],0
mov [wc.cbWndExtra],0
mov eax,[hinstance]
mov [wc.hInstance],eax
mov [wc.hbrBackground],COLOR_BTNFACE+1
mov [wc.lpszMenuName],0
mov [wc.lpszClassName],_class
invoke RegisterClass,wc
invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,192,192,NULL,NULL,[hinstance],NULL
mov [mainhwnd],eax
msg_loop:
invoke GetMessage,msg,NULL,0,0
or eax,eax
jz end_loop
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
end_loop:
invoke ExitProcess,[msg.wParam]
proc WindowProc, hwnd,wmsg,wparam,lparam
push ebx esi edi
cmp [wmsg],WM_CREATE
je wmcreate
cmp [wmsg],WM_DESTROY
je wmdestroy
defwndproc:
invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
jmp finish
wmcreate:
;invoke CreateWindowEx,0,_class_cb,0,WS_CHILD+WS_VISIBLE+CBS_DROPDOWNLIST,16,40,130,125,[hwnd],0,[hinstance],0
;mov [hwnd_cb],eax
stdcall create_control,hwnd_cb,_class_cb,0,WS_CHILD+WS_VISIBLE+CBS_DROPDOWNLIST+CBS_SORT,[hwnd],16,40,155,100,1005
invoke SendMessage,[hwnd_cb],CB_ADDSTRING,0,_class
invoke SendMessage,[hwnd_cb],CB_ADDSTRING,0,_class_cb
invoke SendMessage,[hwnd_cb],CB_SETCURSEL,0,0
invoke SetFocus,[hwnd_cb]
; invoke SendMessage,[hwnd_cb],CB_GETCURSEL ,0,0 ;this code test the get selected string in combo box
; cmp eax,0 ;it returns the index starting at 0
; jne @f
; invoke SendMessage,[hwnd_cb],CB_ADDSTRING,0,_class_cb1
@@:
xor eax,eax
jmp finish
wmdestroy:
invoke PostQuitMessage,0
xor eax,eax
finish:
pop edi esi ebx
ret
endp
proc create_control,handle,_class_name,_caption,style,parent,x,y,w,h,control_id
push ebx esi edi
invoke CreateWindowEx,0,[_class_name],[_caption],[style],[x],[y],[w],[h],[parent],0,[hinstance],[control_id]
mov ecx,[handle]
mov [ecx],eax
;invoke SendMessage,eax,WM_SETFONT,[hFont],0
pop edi esi ebx
ret
endp
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include '\api\kernel32.inc'
include '\api\user32.inc'
;;;;;;;;;; This adds vista style to app COOL ;;;;;;;;;;;;;;;;;;;;;
section '.rsrc' resource data readable
directory RT_MANIFEST, manifest
resource manifest, 1, LANG_NEUTRAL, xpstyle
resdata xpstyle
file 'winxpstyle32.xml'
endres
I had lots of code that did the same basic thing and they all were the same, but the funny thing is the only peace of code that did work was if it had this in it
;======= DoFileOpen =======;
proc DoFileOpen, hwnd
;invoke DestroyWindow, [hwnd]
mov edi,ofn
mov eax,0
mov ecx,10
stosd
mov [ofn.lStructSize], sizeof.OPENFILENAME
mov eax, [hwnd]
mov [ofn.hwndOwner], eax
mov [ofn.lpstrFilter], lpstrFilter
mov [ofn.lpstrFile], szFileName
mov [ofn.nMaxFile], MAX_PATH
mov [ofn.Flags], OFN_FILEMUSTEXIST+OFN_PATHMUSTEXIST+OFN_HIDEREADONLY
mov [ofn.lpstrDefExt], lpstrDefExt
invoke GetOpenFileName, ofn
or eax, eax
jz .FinishFile
;invoke SetWindowText, [hwnd], szFileName
invoke SendMessage,[hwndBox1],CB_ADDSTRING,0,szFileName
invoke SendMessage,eax,WM_SETFONT,[hFont],TRUE
;invoke SetFocus,[hwndBox1]
invoke SendMessage,[hwndBox1],CB_SETCURSEL,0,0
.FinishFile:
;invoke SendMessage,eax,WM_SETFONT,[hFont],TRUE
ret
endp
If i add that code then they work again even if i do not call it.
I have used sys restore to go back and they work OK.
Anyone have any idea ?.
|