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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2012, 23:01   #1
барсун
Новичок
Джуниор
 
Регистрация: 28.02.2012
Сообщений: 2
По умолчанию окно в ассемблере

;код примера
.386p
.model flat, stdcall
option casemap:none

includelib .\masm32\lib\kernel32.lib
includelib .\masm32\lib\user32.lib

include .\masm32\include\windows.inc
include .\masm32\include\kernel32.inc
include .\masm32\include\user32.inc

.data

newhwnd dd 0
hInst dd 00000000h
szTitleName db 'Window Application',0
szClassName db 'ASMCLASS32',0
msg MONMSGSTRUCT >; структура сообщения
wc WNDCLASS >; структура класса

.code
start:
Invoke GetModuleHandle,0 ; получаем hInstanse
Mov [hInst], eax

Mov [wc.style], CS_HREDRAW+CS_VREDRAW+CS_GLOBALCLAS S
; устанавливаем стиль окна
Mov [wc.lpfnWndProc], offset WndProc ;
Mov [wc.cbClsExtra], 0
Mov [wc.cbWndExtra], 0
Mov eax, [hInst]
Mov [wc.hInstance], eax
Invoke LoadIcon,0,IDI_APPLICATION ; получаем значок приложения по
; умолчанию
Mov [wc.hIcon], eax

Invoke LoadCursorA,0,IDC_ARROW ; получаем курсор по умолчанию
Mov [wc.hCursor], eax
Mov [wc.hbrBackground], COLOR_BACKGROUND+1
Mov dword ptr [wc.lpszMenuName], 0
Mov dword ptr [wc.lpszClassName], offset szClassName ; задаём имя класса
;окна
Invoke RegisterClassA,offset wc ; регистрируем класс окна

Push 0
Push [hInst] ; дескриптор
Push 0
Push 0
Push CW_USEDEFAULT ; высота
Push CW_USEDEFAULT ; ширина
Push CW_USEDEFAULT ; y
Push CW_USEDEFAULT ; x
Push WS_OVERLAPPEDWINDOW ; стиль
Push offset szTitleName ; заголовок окна
Push offset szClassName ; имя класса
Push 0 ; дополнительный стиль
Call CreateWindowEx ; создаём окно
mov [newhwnd], eax ; сохраняем его дескриптор
invoke ShowWindow,[newhwnd],SW_SHOWNORMAL; показываем окно
invoke UpdateWindow, [newhwnd]; обновляем его
msg_loop: ; запускаем цикл обработки сообщений
invoke GetMessage,offset msg, 0,0,0
cmp ax, 0
je end_loop
invoke TranslateMessage, offset msg
invoke DispatchMessage, offset msg
jmp msg_loop
end_loop:
invoke ExitProcess, 0

WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD, wparam:DWORD, lparam:DWORD

Cmp [wmsg], WM_DESTROY
Je wmdestroy
Cmp [wmsg], WM_KEYDOWN
Je wmkeydown
Invoke DefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]
; вызываем стандартный обработчик сообщений Jmp finish
wmkeydown:
cmp [wparam], VK_ESCAPE
je wmdestroy; если нажата клавиша Escape то выход
jmp finish
wmdestroy:
invoke PostQuitMessage, 0
invoke ExitProcess, 0 ; выход
finish:
ret
WndProc endp
end start

при компиляции ошибка
rc : fatal error rc1110 : could not open rsrc.rc

что можно сделать?
барсун вне форума Ответить с цитированием
Старый 12.12.2012, 04:26   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

барсун
ты используешь для сборки программы батник, в котором обрабатывается файл с расширением rc, посмотри в папке masm32\bin есть и другие бат-файлы
Mikl___ вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Треугольное окно со сторонами A, B, C. Проверить, пройдёт ли в окно коробка цилиндрической формы (D и H) (паскаль) ihimaru Помощь студентам 5 02.10.2011 22:11
[?] Послать клавишу в чужое окно, не выводя окно на передний план. Moriarty Win Api 4 21.02.2011 05:11
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. RustreX Паскаль, Turbo Pascal, PascalABC.NET 1 11.11.2007 19:28