Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2010, 16:45   #1
Wardrag
Пользователь
 
Регистрация: 14.08.2010
Сообщений: 31
По умолчанию masm32 - После создания окна оно закрывается:(

Вот такая вот процедура окна:

Код:

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.IF uMsg==WM_DESTROY 

invoke PostQuitMessage,NULL 

.ELSEIF uMsg ==  WM_MOUSEMOVE

invoke MessageBox,hWnd,chr$("okno"),chr$("okno"),0

.ELSE

invoke DefWindowProc,hWnd,uMsg,wParam,lParam 
ret
.ENDIF
xor eax,eax
ret

WndProc endp
end start

ВинАсм генерит дофига кода,который мне,собственно,и не нужен(куча дочерних окон и элементов управления к примеру).Потому пишу с нуля.
Почему окно закрывается ? Я даже убрал все сообщения - результат один и тот же.Мне нужно,чтобы оно не закрывалось.
Wardrag вне форума Ответить с цитированием
Старый 20.08.2010, 16:52   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
.ELSE

invoke DefWindowProc,hWnd,uMsg,wParam,lPar am
ret
.ENDIF
xor eax,eax
ret
Интересный финт...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 16:57   #3
Wardrag
Пользователь
 
Регистрация: 14.08.2010
Сообщений: 31
По умолчанию

Как ни крути,а всё равно закрывается.
Wardrag вне форума Ответить с цитированием
Старый 20.08.2010, 16:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты уверен что именно на этом участке проблема?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 17:02   #5
Wardrag
Пользователь
 
Регистрация: 14.08.2010
Сообщений: 31
По умолчанию

Без понятия.Ошибок-то не возникает.:

Код:
.386
.model flat, stdcall
option casemap:none

include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
include C:\masm32\include\kernel32.inc
include \masm32\macros\macros.asm
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\kernel32.lib

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD

.DATA
ClassName db "SimpleWinClass",0
AppName db "Our First Window",0

.DATA?
hInstance HINSTANCE ?
CommandLine LPSTR ?

.CODE 
start:
invoke GetModuleHandle, NULL 

mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess, eax 
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,  CmdShow:DWORD

LOCAL wc:WNDCLASSEX 
LOCAL msg:MSG
LOCAL hwnd:HWND

mov wc.cbSize,SIZEOF WNDCLASSEX 
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW+1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc 
invoke CreateWindowEx,NULL,\
ADDR ClassName,\
ADDR AppName,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
hInst,\
NULL

mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow 
invoke UpdateWindow, hwnd 
invoke GetMessage, ADDR msg,NULL,0,0
.IF (!eax)

.WHILE TRUE ; Enter message loop
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
.ENDIF
mov eax,msg.wParam
ret

WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

.if uMsg == WM_CREATE


invoke MessageBox,hWnd,chr$("shit"),chr$("shit"),0
invoke ExitProcess,0


.elseif uMsg == WM_DESTROY

invoke PostQuitMessage,0
xor eax,eax
ret

.ENDIF

WndProc endp
end start
end

Окно ведь сначала сообщения обрабатывает,так что без разницы,что прописано в главной процедуре окна.
Пример скопировал с гугла).
Wardrag вне форума Ответить с цитированием
Старый 20.08.2010, 17:14   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
invoke GetMessage, ADDR msg,NULL,0,0
.IF (!eax)
Это то зачем? Убери. Тут твои проблемы видимо.
Вот как в шаблоне для МАСМ выглядит
Код:
INVOKE	UpdateWindow,hwnd
	.WHILE TRUE
		invoke	GetMessage,ADDR msg,0,0,0
		.BREAK .IF (!eax)
		invoke	TranslateMessage,ADDR msg
		invoke	DispatchMessage,ADDR msg
	.ENDW
Нет перед циклом никаких условий.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2010, 17:58   #7
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

да у вас там вообще полная лажа-так окна не строят!
ВинАсм ничего лишнего не добавляет вроде как
Читайте Iczelion'а вообщем, чтобы более таким кодом тут никого не смешить
Нет, ну правда..

Последний раз редактировалось yuran666666; 20.08.2010 в 18:01.
yuran666666 вне форума Ответить с цитированием
Старый 20.08.2010, 19:13   #8
Wardrag
Пользователь
 
Регистрация: 14.08.2010
Сообщений: 31
По умолчанию

Ну дак блин MDI мне не нужен и SDI,мне просто нужно тупо пустое окно( Он там генерит прально всё,но удалять приходится офигенное количество кода.

Разобрался.Сделал отдельный асм файлик....всем спасибо за участие.

Последний раз редактировалось Stilet; 21.08.2010 в 08:05.
Wardrag вне форума Ответить с цитированием
Старый 21.08.2010, 17:17   #9
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Цитата:
Сообщение от Wardrag Посмотреть сообщение
Ну дак блин MDI мне не нужен и SDI,мне просто нужно тупо пустое окно( Он там генерит прально всё,но удалять приходится офигенное количество кода.

Разобрался.Сделал отдельный асм файлик....всем спасибо за участие.
местный гура _mikl на васме писывал темку на форуме "сам себе Iczelon"-если хочешь оптимизировать простое окно (и не выкинуть оттуда жизненно важное! ) то туда довольно поучительно
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 23.08.2010, 09:45   #10
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Wardrag
Простейшее окно на MASM'e
Код:
.686P 
.model flat, stdcall
option casemap:none
includelib user32.lib
includelib kernel32.lib
include windows.inc
extern _imp__CreateWindowExA@48:dword
extern _imp__DefWindowProcA@16:dword
extern _imp__DispatchMessageA@4:dword
extern _imp__GetMessageA@16:dword
extern _imp__ExitProcess@4:dword
extern _imp__RegisterClassA@4:dword
.code
start:	xchg ebx,eax
	mov edi,offset wTitle
        mov esi,400000h
	push edi
	push ebx
	push COLOR_WINDOW+1
	push 10011h
	push ebx
	push esi
	push ebx
	push ebx
	push offset WndProc
	push ebx
	push esp
	call _imp__RegisterClassA@4
	push ebx	   
	push esi
        shl esi,9;esi=CW_USEDEFAULT
	push ebx	
	push ebx	
	push esi	
	push esi	
	push esi	
	push esi	
	push WS_OVERLAPPEDWINDOW + WS_VISIBLE
	push edi; szWinTitle			
	push edi; lpszClassName
	push ebx
	call _imp__CreateWindowExA@48	;создать окно
	mov ebp,esp
message_loop: push ebx  ;цикл обработки сообщений
	push ebx
	push ebx
	push ebp 
	call _imp__GetMessageA@16	
	push ebp
	call _imp__DispatchMessageA@4     ;вернуть управление Windows        
	jmp short message_loop
WndProc:
        cmp dword ptr [esp+8],WM_DESTROY;cmp Msg,WM_DESTROY
	je short @@WM_DESTROY
        jmp _imp__DefWindowProcA@16   ;все сообщения, не обрабатываемые в функции WndProc, направляются на обработку по умолчанию	
@@WM_DESTROY: push ebx    ;завершение программы
	call _imp__ExitProcess@4
	wTitle 	db 	'Iczelion Tutorial #3:A Simple Window in masm',0
end start
Mikl___ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самопроизвольно закрывается форма после выполнения процедуры nitroG Помощь студентам 5 04.05.2010 08:20
Обработка события создания окна Clacer Общие вопросы .NET 2 04.03.2010 09:20
delphi7 программа после компиляции сразу закрывается fredd Помощь студентам 1 30.10.2008 14:25
консоль закрывается сразу после выполнения последнего действия F4RR3LL Общие вопросы C/C++ 2 14.09.2008 20:43