⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 font.asm

📁 windows汇编语言程序设计 吴中平著 一书所附所有源代码。 该书重点讲解了Windows环境下汇编语言程序设计的基本原理及其实现过程
💻 ASM
字号:
include .\head.inc
WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
.const
IDM_SELECTFONT  equ 1
IDM_EXIT               equ 3

.data
ClassName        db "WinClass",0
TitleName          db "选择字体",0
cft                     CHOOSEFONT   <0>
DisplayText        db "花溅泪",10,"鸟惊心",10,"山写照",10,"水传神",0
MenuName         db "MyMenu",0
.data?
hInstance	HINSTANCE ?
font               LOGFONT  <>
hFont             HFONT   ?
hOldFont        HFONT   ?
Rect               RECT <>
.code
start:
   invoke GetModuleHandle, NULL
   mov    hInstance,eax
   invoke WinMain, NULL,NULL,NULL, 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 or CS_DBLCLKS
        mov   wc.lpfnWndProc, OFFSET WndProc
        mov   wc.cbClsExtra,NULL
        mov   wc.cbWndExtra,NULL
        mov   eax, hInstance
        mov   wc.hInstance,eax
        invoke GetStockObject,WHITE_BRUSH 
        mov   wc.hbrBackground,eax
        mov   wc.lpszMenuName,offset MenuName
        mov   wc.lpszClassName,OFFSET ClassName
        invoke LoadIcon,NULL,IDI_ASTERISK
        mov   wc.hIcon,eax
        mov   wc.hIconSm,0
        invoke LoadCursor,NULL,IDC_HAND
        mov   wc.hCursor,eax
        invoke RegisterClassEx, addr wc
        invoke CreateWindowEx,WS_EX_CLIENTEDGE+WS_EX_APPWINDOW+WS_EX_TOPMOST,addr ClassName,\
                              addr TitleName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,200,\
                              NULL,NULL,hInst,NULL
        mov   hwnd,eax
        invoke ShowWindow,hwnd,CmdShow
        invoke UpdateWindow,hwnd
        .while TRUE
           invoke GetMessage, addr msg,NULL,0,0
           .BREAK .IF (!eax)
            invoke DispatchMessage, addr msg
        .endw
        mov eax,msg.wParam
        ret
WinMain endp
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
         local hdc:HDC
         local ps:PAINTSTRUCT
        .if uMsg==WM_DESTROY
             invoke DeleteObject ,hFont
             invoke PostQuitMessage,NULL
        .elseif uMsg==WM_COMMAND
             mov eax,wParam
             .if ax==IDM_SELECTFONT
               mov cft.lStructSize,sizeof CHOOSEFONT
               mov eax,hWnd
               mov cft.hwndOwner,eax
               mov eax,hInstance
               mov cft.hInstance,eax
               mov cft.lpLogFont,offset font
               mov cft.rgbColors,0ffh
               mov cft.Flags,CF_BOTH+CF_TTONLY+CF_EFFECTS 
               invoke ChooseFont,addr cft 
               invoke InvalidateRect,hWnd,NULL,TRUE
             .else
               invoke DestroyWindow,hWnd
             .endif  
        .elseif uMsg==WM_SIZE
             invoke GetClientRect,hWnd,addr Rect
        .elseif uMsg==WM_PAINT
             invoke BeginPaint,hWnd,addr ps
             mov   hdc,eax
             invoke CreateFontIndirect,addr font
             mov hFont,eax
             invoke SelectObject,hdc,hFont
             mov hOldFont,eax
             invoke SetTextColor,hdc,cft.rgbColors
             invoke DrawText,hdc,addr DisplayText,-1,addr Rect,DT_CENTER
             invoke SelectObject,hdc,hOldFont
             invoke EndPaint  ,hWnd,addr ps          
	.else
	   invoke DefWindowProc,hWnd,uMsg,wParam,lParam		
	   ret
	.endif
	xor eax,eax
	ret
WndProc endp
end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -