Код (Text): format PE GUI 4.0 entry MyEntry include 'if.inc' include 'win32a.inc' section '.data' data readable writeable gIst dd 0 gWnd dd 0 section '.code' code readable executable MyEntry: invoke GetModuleHandle,eax mov [gIst],eax invoke DialogBoxParam,eax,1,0,DlgProc,0 ExitApp: invoke ExitProcess,0 proc DlgProc,hWnd,uMsg,wParam,lParam push edi esi ebx mov eax,[uMsg] .if eax = WM_INITDIALOG mov eax,[hWnd] mov [gWnd],eax mov eax,1 .elseif eax = WM_COMMAND mov eax,[wParam] .if eax = IDOK invoke SendMessage,[hWnd],WM_CLOSE,0,0 mov eax,1 .else xor eax,eax .endif .elseif eax = WM_CLOSE invoke EndDialog,[hWnd],0 mov eax,1 .endif pop ebx esi edi ret endp section '.idata' import data readable writeable library kernel, 'KERNEL32.DLL',\ user, 'USER32.DLL' import kernel,\ GetModuleHandle,'GetModuleHandleA',\ ExitProcess, 'ExitProcess' import user,\ DialogBoxParam, 'DialogBoxParamA',\ EndDialog, 'EndDialog',\ SendMessage, 'SendMessageA' section '.rsrc' resource data readable directory RT_DIALOG,dialogs resource dialogs,\ 1,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration dialog demonstration,'IDD_DLG1',6,6,194,106,WS_CAPTION+WS_POPUP+WS_SYSMENU+DS_MODALFRAME dialogitem 'BUTTON','OK',IDOK,130,84,50,13,WS_VISIBLE+WS_TABSTOP+BS_DEFPUSHBUTTON enddialog Почему, когда я подключаю if.inc и переписываю процедуру окна на работу с макросами окно не выводиться а болтается только кнопка окна, при этом процесс кушает 99% времени процессора ? format PE GUI 4.0 - есть; вызов InitCommonControls - ничего не дает (ситуация не меняется) Я новичек - не пинайте слишком сильно ...
Код (Text): proc DlgProc,hWnd,uMsg,wParam,lParam push edi esi ebx mov eax,[uMsg] .if eax = WM_INITDIALOG mov eax,[hWnd] mov [gWnd],eax mov eax,1 .elseif eax = WM_COMMAND mov eax,[wParam] .if eax = IDOK invoke SendMessage,[hWnd],WM_CLOSE,0,0 mov eax,1 .else xor eax,eax .endif .elseif eax = WM_CLOSE invoke EndDialog,[hWnd],0 mov eax,1 .else invoke DefWindowProc, [hWnd], [uMsg], [wParam], [lParam] xor eax, eax .endif pop ebx esi edi ret endp
Спасибки. А почему тогда работает стандартный пример из FASMа(%fasm%\examples\dialog\dialog.asm) ? Там ведь не вызывается DefWindowProc ... Или вызов идет неявно ?
Не правильно у обоих. Voronve Ты забыл добавить .else и вернуть оттуда 0. n0name В диалоге DefWindowProc не нужен и вроде как будет ошибкой.
.else xor eax, eax ;Действительно помогло ... Сенькс ... Вызов DefWindowProc при пизменении размеров окна вызывал глюки ... Ну тогда и на последок: Иконка в библиотеке, диалог в библиотеке, вызов диалога идет в самой библиотеке invoke LoadIcon,gIst,2001 ;IconAPP invoke SendMessage,[hWnd],WM_SETICON,ICON_SMALL,2001 ;IconAPP Не переустанавливает иконку