MASM32 Downloads
Hi, zedd151!Thanks for the noticed error. I'll try to fix the blinking text
; GUI #include win64a.incID_RESET equ 0ID_FONT equ 1ID_HELP equ 2ID_EXIT equ 3IDM_MENU equ 37IDC_ICON1 equ 500IDR_MAINACCEL equ 105.codeWinMain proclocal msg:MSG xor ebx,ebx mov ecx,offset FileName invoke LoadCursorFromFile mov esi,IMAGE_BASE mov edi,offset ClassName push rax ;hIconSm push rdi ;lpszClassName push IDM_MENU ;lpszMenuName push COLOR_WINDOW;hbrBackground push 10003h ;hCursor push rax ;hIcon push rsi ;hInstance push rbx ;cbClsExtra & cbWndExtra pushaddr WndProc ;lpfnWndProc push sizeof WNDCLASSEX;cbSize & style invoke RegisterClassEx,esp;addr WNDCLASSEX push rbx push rsi ;rsi=400000h shl esi,9 ;rsi=CW_USEDEFAULT push rbx push rbx push rsi push rsi push rsi push rsi sub esp,20h invoke CreateWindowEx,0,edi,edi,WS_OVERLAPPEDWINDOW or WS_VISIBLE mov hwnd,rax invoke LoadAccelerators,IMAGE_BASE,IDR_MAINACCEL mov ACC,rax lea edi,msg@@: invoke GetMessage,edi,0,0,0 invoke TranslateAccelerator,hwnd,ACC,edi or eax,eax jne @b invoke TranslateMessage,edi invoke DispatchMessage,edi jmp @bWinMain endp;----------------------------------------WndProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM local ps:PAINTSTRUCTlocal hdc:qwordlocal size0:POINTlocal string[255]:bytelocal cf:CHOOSEFONTlocal lf:LOGFONT mov hWnd,rcx cmp edx,WM_DESTROY je wmDESTROY cmp edx,WM_CREATE je wmCREATE cmp edx,WM_PAINT je wmPAINT cmp edx,WM_COMMAND je wmCOMMAND leave jmp NtdllDefWindowProc_wmDESTROY:invoke DeleteDC,memDC invoke DeleteObject,hNewFont1 invoke DeleteObject,hNewFont2 invoke RtlExitUserProcess,0wmCOMMAND:and r8d,11111y;wParam cmp r8d,ID_EXIT ja wmBYE jmp handler[r8*8]FONT:;---------------------------------- push rdi xor eax,eax mov ecx,(sizeof CHOOSEFONT)/8 lea edi,cf rep stosq pop rdi; ZeroMemory mov cf.lStructSize,sizeof CHOOSEFONT mov rax,hwnd mov cf.hwndOwner,rax lea eax,lf mov cf.lpLogFont,rax mov cf.Flags,CF_SCREENFONTS or CF_EFFECTS; lea ecx,cf invoke ChooseFont or eax,eax jz wmBYE lea ecx,lf invoke CreateFontIndirect invoke SelectObject,memDC,eax invoke SetTextColor,memDC,cf.rgbColors invoke SetBkMode,memDC,TRANSPARENT mov edx,offset tm invoke GetTextMetrics,memDC lea ecx,string mov edx,offset fmt1 lea r8d,lf.lfFaceName mov r9d,tm.tmHeight invoke wsprintf;выводим строку lea r9d,string invoke TextOut,memDC,X,Y,,rax mov eax,tm.tmHeight add eax,tm.tmExternalLeading add Y,rax mov qword ptr [rsp+20h],sizeof string1 lea r9d,string1 invoke TextOut,memDC,X,Y mov r8d,sizeof string1 lea edx,string1 lea r9d,size0 invoke GetTextExtentPoint32,memDC mov eax,size0.x mov X,rax lea ecx,string mov edx,offset fmt2 mov r8d,size0.x invoke wsprintf lea r9d,string invoke TextOut,memDC,X,Y,,rax mov eax,tm.tmHeight add eax,tm.tmExternalLeading add Y,rax and X,0 lea ecx,string mov edx,offset fmt3 invoke wsprintf,,,maxX,maxY lea r9d,string invoke TextOut,memDC,X,Y,,rax mov eax,tm.tmHeight add eax,tm.tmExternalLeading add Y,rax invoke InvalidateRect,hWnd,0,1 jmp wmBYERESET: and X,0 and Y,0 invoke PatBlt,memDC,0,0,maxX,maxY,PATCOPY invoke InvalidateRect,hWnd,0,1 jmp wmBYEHELP: mov ecx,offset mb invoke MessageBoxIndirect jmp wmBYEwmCREATE:invoke GetSystemMetrics,SM_CXSCREEN mov maxX,rax invoke GetSystemMetrics,SM_CYSCREEN mov maxY,rax invoke GetDC,hWnd mov hdc,rax invoke CreateCompatibleDC,eax mov memDC,rax invoke CreateCompatibleBitmap,hdc,maxX,maxY invoke SelectObject,memDC,eax invoke GetStockObject,WHITE_BRUSH invoke SelectObject,memDC,eax invoke PatBlt,memDC,0,0,maxX,maxY,PATCOPY invoke SetBkMode,memDC,TRANSPARENT invoke ReleaseDC,hWnd,hdc jmp wmBYEwmPAINT:lea edx,ps invoke BeginPaint mov hdc,rax invoke BitBlt,eax,0,0,maxX,maxY,memDC,0,0,SRCCOPY lea edx,ps invoke EndPaint,hWndwmBYE: leave retnhandler dq RESET,FONT,HELP,wmDESTROYWndProc endp;-----------------------------------------ClassName db "Uncle Remus tales:#5e Work with Font",0expTxt db "Win64 assembly with MASM is great and easy",0FileName db "br_Rabbit3.cur",0hwnd dq ?fmt1 db 'Font height "%s" is %d pixels',0string1 db "This is the next line.",0fmt2 db "Length of the previous line is %d units",0fmt3 db "Screen size is %d by %d",0ACC dq ?tm TEXTMETRICA <>X dq 0Y dq 0maxX dq ?maxY dq ?memDC dq ?hOldFont dq ?hNewFont1 dq ?hNewFont2 dq ?MBText db "F1: Help",10,"F2: Choose font",10,"F3: Clear screen",10,"Ctrl+X: Exit",0mb label MSGBOXPARAMS dd sizeof MSGBOXPARAMS,?;cbSize dq 0 ;hwndOwner dq IMAGE_BASE ;hInstance dq MBText ;lpszText dq ClassName ;lpszCaption dd MB_OK or MB_USERICON or MB_TOPMOST,?;dwStyle dq IDC_ICON1 ;lpszIcon dd 0,?;dwContextHelpId dq 0 ;lpfnMsgBoxCallback dd 0,?;dwLanguageIdend
#include "resource.h"#define ID_RESET 0#define ID_FONT 1#define ID_HELP 2#define ID_EXIT 3#define IDM_MENU 37#define IDC_ICON1 500#define IDR_MAINACCEL 105IDC_ICON1 ICON DISCARDABLE "br_Bear4.ico"IDM_MENU MENU{ POPUP "&Font" { MENUITEM "Choose &font\tF2",ID_FONT MENUITEM "&Clear Screeen\tF3",ID_RESET MENUITEM "&Help\tF1",ID_HELP MENUITEM SEPARATOR MENUITEM "E&xit\tCtrl+X",ID_EXIT } MENUITEM "E&xit",ID_EXIT}IDR_MAINACCEL ACCELERATORS DISCARDABLE{ VK_F1, ID_HELP,VIRTKEY VK_F2, ID_FONT,VIRTKEY VK_F3, ID_RESET,VIRTKEY "^X", ID_EXIT}
mov r8d,offset expTxt0 mov edx,offset aStatic sub esp,20h invoke CreateWindowEx,0,,,SS_LEFT or WS_CHILD or WS_VISIBLE mov hStaticText1,rax;создания элемента STATIC для вывода текста функцией SendMessage