MASM добавление кнопок - Assembler
Формулировка задачи:
Помогите пожалуйста! Только начинаю изучать ассемблер. Было обычное окно, my caption, хочу добавить кнопки, но ничего не появляется, почему?
Вот сам код
Заранее спасибо!
.386 .model flat,stdcall option casemap:none include C:\masm32\INCLUDE\WINDOWS.INC include C:\masm32\INCLUDE\KERNEL32.INC include C:\masm32\INCLUDE\USER32.INC include C:\masm32\INCLUDE\ADVAPI32.INC include C:\masm32\INCLUDE\GDI32.INC include my.inc includelib C:\masm32\lib\comctl32.lib includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\gdi32.lib includelib C:\masm32\lib\kernel32.lib includelib C:\masm32\lib\user32.lib includelib C:\masm32\lib\advapi32.lib ;########################################################### MAIN_WINDOW_PROC PROTO :DWORD , :DWORD , :DWORD , :DWORD ;########################################################### ;data--data--data--data--data--data--data--data--data--data-- PROC ;---------------------------------------------------------------------------------------------- .DATA HINST DWORD NULL HWND_WIN DWORD NULL ;- String_CLASS DB "MY_WINDOW",0 String_CAPTION DB "MY_CAPTION",0 ;- BUTTON_CLASS DB "BUTTON",0 EDIT_CLASS DB "EDIT",0 COMBO_CLASS DB "COMBOBOX",0 ;- BUTTON_NAME DB "MY_BUTTON",0 STRING_NULL DB 0,0,0,0 MSG_WIN MSG <0> EXTERN MessageBoxA@16:NEAR ;############################################################## ;code--code--code--code--code--code--code--code--code--code-- PROC ;-------------------------------------------------------------------------------------------------- .CODE START: invoke GetModuleHandle , Null mov HINST , EAX ;- CALL MY_REGISTER_CLASS cmp EAX , null je EXIT ;- invoke CreateWindowEx , Null , addr String_CLASS , addr String_CAPTION , \ WS_VISIBLE + WS_CAPTION + WS_SYSMENU , 100 , 100 , 500 , 500 , \ NULL , NULL , HINST , NULL ;- MOV HWND_WIN , EAX ;- invoke ShowWindow , HWND_WIN , TRUE invoke UpdateWindow , HWND_WIN ;==================== MSG_LOOP: invoke GetMessage , addr MSG_WIN , null , null , null CMP Eax , FALSE JE EXIT invoke TranslateMessage , addr MSG_WIN invoke DispatchMessage , addr MSG_WIN JMP MSG_LOOP ;==================== EXIT: invoke ExitProcess , Null ;---------------------------------------------------------------------------------------------------------- ; GET POINT SCREEN ;---------------------------------------------------------------------------------------------------------- MY_REGISTER_CLASS PROC local _Struct_WNDCLASS : WNDCLASS ;- Mov _Struct_WNDCLASS.style , NULL ; стиль окна ; Mov Eax , Mov _Struct_WNDCLASS.lpfnWndProc , MAIN_WINDOW_PROC ; процедура окна Mov _Struct_WNDCLASS.cbClsExtra , null ; дополнительная память для класса Mov _Struct_WNDCLASS.cbWndExtra , null ; дополнительная память для окна Mov Eax , HINST Mov _Struct_WNDCLASS.hInstance , Eax ; handle приложения Mov _Struct_WNDCLASS.lpszMenuName , NULL ; идентификатор меню Mov _Struct_WNDCLASS.lpszClassName , offset String_CLASS ; адрес строки класса ;- invoke LoadIcon , NULL , IDI_ASTERISK Mov _Struct_WNDCLASS.hIcon , Eax ;- invoke LoadCursor , NULL , IDC_IBEAM Mov _Struct_WNDCLASS.hCursor , Eax ;- invoke CreateSolidBrush , 0012FFffh ; возвратит идентификатор кисти Mov _Struct_WNDCLASS.hbrBackground , Eax ;============== invoke RegisterClassA , addr _Struct_WNDCLASS ;============== ret MY_REGISTER_CLASS ENDP ;--------------------------------------------------------------------------------------------------------------------------- ; WINDOW PROCEDURE ;--------------------------------------------------------------------------------------------------------------------------- MAIN_WINDOW_PROC PROC USES EBX ESI EDI \ hWnd_ :DWORD , MESG :DWORD , wParam :DWORD , lParam:DWORD ;- CMP MESG , WM_DESTROY JE WMDESTROY ;---- invoke DefWindowProc , hWnd_ , MESG , wParam , lParam jmp FINISH ;---- WMCREATE: ; отсюда создание кнопок invoke CreateWindowEx , NULL , addr BUTTON_CLASS , \ addr BUTTON_NAME , \ WS_CHILD + WS_VISIBLE , 20 , 20 , 120 ,40 , \ hWnd_ , NULL , HINST , NULL ;- invoke CreateWindowEx , WS_EX_CLIENTEDGE , addr EDIT_CLASS , \ addr STRING_NULL , \ WS_CHILD + WS_VISIBLE , 20 , 100 , 200 , 20 , \ hWnd_ , NULL , HINST , NULL ;- invoke CreateWindowEx , NULL , addr COMBO_CLASS , \ addr STRING_NULL , \ WS_CHILD + WS_VISIBLE + CBS_DROPDOWN , 20 , 150, 200 , 200 , \ hWnd_ , NULL , HINST , NULL ; jmp FINISH WMDESTROY: invoke PostQuitMessage , False ;- FINISH: RET 16 MAIN_WINDOW_PROC ENDP ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ END START
Решение задачи: «MASM добавление кнопок»
textual
Листинг программы
CMP MESG, WM_CREATE JE WMCREATE
Объяснение кода листинга программы
MESG
- это переменная, которая содержит сообщение, связанное с созданием окна.WM_CREATE
- это константа, которая указывает на сообщение, связанное с созданием окна.WMCREATE
- это метка, которая указывает на начало кода, выполняемого при создании окна.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д