Steward
分享是一種喜悅、更是一種幸福
程式語言 - Netwide Assembler (NASM) - Win32 API (NASMX) - Painting - Create Font
參考資訊:
https://masm32.com/board/index.php
https://www.nasm.us/xdoc/2.13rc9/html/nasmdoc0.html
在Windows視窗程式設計中,當需要文字輸出顯示在視窗上時,一般都會使用自定義的字型,因為系統預設的字型太小,而自定義的字型,除了可以是粗體或者斜體,還可以設定自定義的長寬尺寸,司徒使用一個簡單例子來說明如何建立自定義的字型
main.asm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | % include " c :\\nasmx\\ inc \\nasmx. inc " % include " c :\\nasmx\\ inc \\win32\\msvcrt. inc " % include " c :\\nasmx\\ inc \\win32\\windows. inc " % include " c :\\nasmx\\ inc \\win32\\gdi32. inc " % include " c :\\nasmx\\ inc \\win32\\user32. inc " % include " c :\\nasmx\\ inc \\win32\\kernel32. inc " entry start false equ 0 CLEARTYPE_QUALITY equ 5 section . data szCaption declare ( NASMX_TCHAR ) NASMX_TEXT (" main "),0 szFont declare ( NASMX_TCHAR ) NASMX_TEXT ("Arial"),0 szMsg declare ( NASMX_TCHAR ) NASMX_TEXT ("Test"),0 dwMsg equ ($ - szMsg) - 1 hWin dd 0 hInstance dd 0 defWndProc dd 0 CommandLine dd 0 NASMX_ISTRUC msg, MSG NASMX_IENDSTRUC NASMX_ISTRUC ps, PAINTSTRUCT NASMX_IENDSTRUC section . text proc WndProc , dword hWnd, uint_t uMsg, dword wParam, dword lParam locals local hdc, DWORD local font , DWORD endlocals switch dword [ argv (.uMsg)] case dword WM_PAINT invoke BeginPaint , [ argv (.hWnd)], ps mov [ var (.hdc)], eax invoke CreateFont , 48, 0, 0, 0, FW_BOLD , false , false , false , 0, \ OUT_OUTLINE_PRECIS , CLIP_DEFAULT_PRECIS , \ CLEARTYPE_QUALITY , DEFAULT_PITCH | FF_DONTCARE , szFont mov [ var (. font )], eax invoke SetTextColor , [ var (.hdc)], 0xff invoke SetBkMode , [ var (.hdc)], TRANSPARENT invoke SelectObject , [ var (.hdc)], [ var (. font )] invoke TextOut , [ var (.hdc)], 100, 100, szMsg, dwMsg invoke EndPaint , [ argv (.hWnd)], ps invoke DeleteObject , [ var (. font )] break case dword WM_CLOSE invoke DestroyWindow , [ argv (.hWnd)] break case dword WM_DESTROY invoke PostQuitMessage , 0 break default invoke CallWindowProc , [defWndProc], [ argv (.hWnd)], [ argv (.uMsg)], [ argv (.wParam)], [ argv (.lParam)] endswitch endproc proc WinMain , dword hInst, dword hPrevInst, dword CmdLine, dword CmdShow locals none invoke CreateWindowEx , WS_EX_LEFT , WC_DIALOG , szCaption, \ WS_OVERLAPPEDWINDOW | WS_VISIBLE , 0, 0, 300, 300, NULL , NULL , NULL , NULL mov [hWin], eax invoke SetWindowLong , [hWin], GWL_WNDPROC , WndProc mov [defWndProc], eax do invoke DispatchMessage , msg invoke GetMessage , msg, NULL , NULL , NULL while eax , !=, 0 mov eax , dword [msg + MSG .wParam] endproc proc start , dword argc , dword argv locals none invoke GetModuleHandle , NULL mov [hInstance], eax invoke GetCommandLine , NULL mov [CommandLine], eax invoke WinMain , [hInstance], NULL , [CommandLine], SW_SHOWNORMAL invoke ExitProcess , NULL endproc |
Line 41~44:創造一個大小48、粗體的Arial字型
完成