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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2010, 12:37   #1
Osanve
Пользователь
 
Аватар для Osanve
 
Регистрация: 11.12.2010
Сообщений: 50
По умолчанию Не отображается окно программы

Постепенно повышаю свои знания ассемблера, и столкнулся со следующей проблемой:
После компиляции и линковки файлов, которые в архиве, программа в процессах висит, но само окно не отображается.
Прошу совета.
np.zip
Osanve вне форума Ответить с цитированием
Старый 11.12.2010, 22:03   #2
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Жесть какая-то!!!
Людиии, ну нет на ассемблере if, while и т.д.
Ну неужели вот это:
Код:
.if	uMsg==WM_CREATE
	invoke	CreateWindowEx, NULL, addr EditClass, NULL, \
		WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL,\
		0, 0, 0, 0, hWnd, EditID, hInstance, NULL
	mov	hwndEdit, eax
	invoke	SetFocus, hwndEdit
	mov	ofn.lStructSize, sizeof ofn
	push	hWnd
	pop	ofn.hWndOwner
	push	hInstance
	pop	ofn.hInstance
	mov	ofn.lpstrFilter, offset FilterString
	mov	ofn.lpstrFile, offset buffer
	mov	ofn.nMaxFile,	MAXSIZE

.elseif	uMsg==WM_SIZE
	mov	eax, lParam
	mov	edx, eax
	shr	edx, 16
	and	eax, 0FFFFh
	invoke	MoveWindow, hwndEdit, 0, 0, eax, edx, TRUE
.elseif	uMsg==WM_DESTROY
	invoke	PostQuitMessage, NULL

.elseif	uMsg==WM_COMMAND
	mov	eax, wParam
	.if	lParam==0
		.if	ax==IDM_OPEN
			mov	ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
				OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
			invoke	GetOpenFileName, addr ofn
			.if eax==TRUE
			invoke	CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,\
				NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL
			mov	hFile, eax
			invoke	HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
			mov	pMemory, eax
			invoke	ReadFile, hFile, pMemory, MEMSIZE-1, addr SizeReadWrite, NULL
			invoke	SendMessage, hwndEdit, WM_SETTEXT, NULL, pMemory
			invoke	HeapFree, hHeap, NULL, pMemory
			invoke	CloseHandle, hFile
		.endif
			invoke	SetFocus, hwndEdit
		.elseif ax==IDM_SAVE
			mov	ofn.Flags, OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
			invoke	GetSaveFileName, addr ofn
			.if	eax==TRUE
			invoke	CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE,\
				FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_NEW, \
				FILE_ATTRIBUTE_ARCHIVE,	NULL
			mov	hFile, eax
			invoke	HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
			mov	pMemory, eax
			invoke	SendMessage, hwndEdit, WM_GETTEXT, MEMSIZE-1, pMemory
			invoke	WriteFile, hFile, pMemory, eax,	addr SizeReadWrite, NULL
			invoke	HeapFree, hHeap, NULL, pMemory
			invoke	CloseHandle, hFile
			.endif
	.endif
	invoke	SetFocus, hwndEdit
	.endif
.else
	invoke	DefWindowProc, hWnd,uMsg,wParam, lParam
	ret
.endif
	xor	eax, eax
	ret
WndProc	endp
Читабельнее, чем вот это:

Код:
WndProc2 proc uses ebx hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM

	cmp	[uMsg], WM_CREATE
	je	wmcreate
	cmp	[uMsg], WM_SIZE
	je	wmsize
	cmp	[uMsg], WM_CLOSE
	je	wmdestroy
	cmp	[uMsg], WM_DESTROY
	je	wmdestroy
	cmp	[uMsg], WM_COMMAND
	je	wmcommand_select
	invoke	DefWindowProcA, [hWnd],[uMsg],[wParam],[lParam]
	ret
wmcreate:
	invoke	CreateWindowEx, NULL, addr EditClass, NULL, \
		WS_VISIBLE or WS_CHILD or ES_LEFT or ES_MULTILINE or ES_AUTOHSCROLL or ES_AUTOVSCROLL,\
		0, 0, 0, 0, hWnd, EditID, hInstance, NULL
	mov	hwndEdit, eax
	invoke	SetFocus, hwndEdit
	mov	ofn.lStructSize, sizeof ofn
	push	hWnd
	pop	ofn.hWndOwner
	push	hInstance
	pop	ofn.hInstance
	mov	ofn.lpstrFilter, offset FilterString
	mov	ofn.lpstrFile, offset buffer
	mov	ofn.nMaxFile,	MAXSIZE
	xor	eax, eax
	ret
wmsize:
	mov	eax, lParam
	mov	edx, eax
	shr	edx, 16
	and	eax, 0FFFFh
	invoke	MoveWindow, hwndEdit, 0, 0, eax, edx, TRUE
	xor	eax, eax
	ret
wmdestroy:
	invoke	PostQuitMessage, NULL
	xor	eax, eax
	ret
wmcommand_select:
	cmp	lParam, 0
	je	wmcommand_menu
	xor	eax, eax
	ret
wmcommand_menu:
	mov	eax, wParam
	cmp	ax, IDM_OPEN
	je	wmcommand_menuOpen
	cmp	ax, IDM_SAVE
	je	wmcommand_menuSave
	xor	eax, eax
	ret
wmcommand_menuOpen:
	mov	ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or \
		OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
		invoke	GetOpenFileName, addr ofn
	cmp	eax, 0
	je	OpenNotFile
	invoke	CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE,\
		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL
	mov	hFile, eax
	invoke	HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
	mov	pMemory, eax
	invoke	ReadFile, hFile, pMemory, MEMSIZE-1, addr SizeReadWrite, NULL
	invoke	SendMessage, hwndEdit, WM_SETTEXT, NULL, pMemory
	invoke	HeapFree, hHeap, NULL, pMemory
	invoke	CloseHandle, hFile
OpenNotFile:
	invoke	SetFocus, hwndEdit
	xor	eax, eax
	ret
wmcommand_menuSave:
	mov	ofn.Flags, OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY
	invoke	GetSaveFileName, addr ofn
	cmp	eax, 0
	je	SaveNotFile
	invoke	CreateFile, addr buffer, GENERIC_READ or GENERIC_WRITE,\
		FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, CREATE_NEW, \
		FILE_ATTRIBUTE_ARCHIVE,	NULL
	mov	hFile, eax
	invoke	HeapAlloc, hHeap, HEAP_ZERO_MEMORY, MEMSIZE
	mov	pMemory, eax
	invoke	SendMessage, hwndEdit, WM_GETTEXT, MEMSIZE-1, pMemory
	invoke	WriteFile, hFile, pMemory, eax,	addr SizeReadWrite, NULL
	invoke	HeapFree, hHeap, NULL, pMemory
	invoke	CloseHandle, hFile
SaveNotFile:
	invoke	SetFocus, hwndEdit
	xor	eax, eax
	ret
WndProc2	endp
В атт. поправленный пример.
Вложения
Тип файла: rar np.rar (4.0 Кб, 8 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 12.12.2010, 00:16   #3
Osanve
Пользователь
 
Аватар для Osanve
 
Регистрация: 11.12.2010
Сообщений: 50
По умолчанию

Ulex, информация бралась с сайта wasm.ru.
По поводу Вашего кода, могу сказать, что более читабелен.
За помощь благодарю.
Osanve вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сайт не отображается в IE и Opera. Отображается только в FireFox. Roman_K HTML и CSS 3 03.02.2011 22:32
Увеличить окно программы misher Общие вопросы Delphi 7 26.09.2010 22:02
Найти окно программы ксли запущен exe Человек_Борща Общие вопросы Delphi 2 28.08.2010 12:39
Как открыть не главное окно программы DimOn4Ik Общие вопросы Delphi 8 13.04.2010 17:23