Tài liệu Tìm hiểu các thuộc tính của chữ - Pdf 87

Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text
Tìm hiểu các thuộc tính của chữ

Trong Windows, khi trình bày văn bản, các ký tự được thể hiện theo nhiều dạng
khác nhau. Đây là một trong những đặc trưng cơ bản của giao diện đồ họa - người dùng
(GUI – Graphical User Interface). Để thực hiện điều này, Windows hỗ trợ nhiều dạng
font chữ khác nhau. Trong phần này, chúng ta tìm hiểu các vấn đề chính về các font chữ,
màu sắc cũng như cách sử dụng chúng để trình bày văn bản.

Tìm hiểu về hệ thống màu

Hệ thống màu của Windows có được xây dựng dựa trên hệ thống màu RGB
(R=Red, G=Green, B=Blue) – hiểu nôm na là mỗi màu có được bằng cách trộn 3 màu cơ
bản là Red (đỏ), Green (xanh lá cây), Blue (xanh lam). Nếu bạn muốn sử dụng một màu
trên Windows, bạn phải cho biết giá trị của 3 thành phần màu R, G, B nói trên. Mỗi thành
phần màu tương ứng với một số từ 0 đến giá trị lớn nhất (tùy theo số bit cho mỗi điểm
ảnh), thông thường từ từ 0 đến 255 (giá trị 1 byte).
Ví dụ, nếu bạn muốn có m
àu đỏ “thuần túy” thì bạn phải chỉ định giá trị của R,G, B lần
lượt là 255,0,0 (R=255, G=0, và B=0). Hay nếu bạn muốn có màu trắng “thuần túy” thì
giá trị lần lượt là 255,255,255. Như vậy, để có được màu mà bạn cần thì rất khó khăn với
hệ thống như vậy, trừ khi bạn phải biết được giá trị của 3 thông số màu tương ứng trong
mỗi màu để. Đối với màu chữ và màu nền, bạn dùng hà
m SetTextColor và SetBkColor,
cả hai đều sử dụng một handle của DC và một giá trị màu 32-bit RGB. Hệ thống 32-bit
giá trị RGB được định nghĩa như sau:
RGB_value struct
unused db 0

việc thể hiện với các kích thước khác nhau (do chỉ phóng to, thu nhỏ, và khi phóng sẽ bị bể ảnh).

Font vector thể hiện các ký tự như là tập hợp các nét vẽ (sử dụng các hàm GDI), do đó linh động
và co giản hơn font bitmap, tuy nhiên được vẽ khá chậm và đường nét cũng không được mềm mại
cho lắm.

 Font TrueType là dạng font được sử dụng phổ biến nhất hiện nay, được lưu trữ dưới dạng một
tập các điểm ảnh, kết hợp một số thuật toán biến đổi. Do đó thể hiện sắc xảo các đường nét trên
màn hình và máy in. Chúng ta sẽ khảo sát các hàm xử lý cho các font chữ dạng này.
Những lý thuyết về font ở phần trên, bạn không cần nhớ. Tóm lại, để tạo font (font logic),
bạn gọi hàm CreateFont hay CreatFontIndirect. Hàm CreateFontIndirect nhận con
trỏ cấu trúc LOGFONT. Xét định nghĩa của cấu trúc LOGFONT :

typedef struct tagLOGFONT // lf
{
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;

Sau khi dùng font, ta cần loại bỏ font dùng hàm DeleteObject. Chú ý không được xoá font trong DC đang
thực thi, hoặc font hệ thống.
.386
.model flat,stdcall
option casemap:none
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
RGB macro red,green,blue
xor eax,eax
mov ah,blue
shl eax,8
mov ah,green
mov al,red
endm
.data

ClassName db "SimpleWinClass",0
AppName db "Our First Window",0
TestString db "Win32 assembly is great and easy!",0
FontName db "script",0
Người dịch: Benina (REA TEAM) Trang 3
Tổng hợp và hiệu chỉnh: NhatPhuongLe (VNCERT TEAM)
Iczelion’s Tutorial Win32 ASM Tutorial 5 : More about Text
.data?

invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
hInst,NULL
mov hwnd,eax
invoke ShowWindow, hwnd,SW_SHOWNORMAL
invoke UpdateWindow, hwnd
.WHILE TRUE
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
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
LOCAL hfont:HFONT
.IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.ELSEIF uMsg==WM_PAINT
invoke BeginPaint,hWnd, ADDR ps
mov hdc,eax
invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,\



Hàm CreatFont tạo ra một font logic, mà các tham số đầu vào của hàm này tương ứng với
các trường của cấu trúc LOGFONT (lfHeight – nHeight; lfWidth – nWidth) cũng như các
font hiện có. Hàm này có nhiều tham số hơn bất cứ hàm nào khác trong Windows. Nó trả
về một handle của font logic, dùng cho hàm SelectObject. Sau đây, là chi tiết các tham số
của nó:

CreateFont proto nHeight:DWORD,\
nWidth:DWORD,\
nEscapement:DWORD,\
nOrientation:DWORD,\
nWeight:DWORD,\
cItalic:DWORD,\
cUnderline:DWORD,\
cStrikeOut:DWORD,\
cCharSet:DWORD,\
cOutputPrecision:DWORD,\
cClipPrecision:DWORD,\
cQuality:DWORD,\
cPitchAndFamily:DWORD,\
lpFacename:DWORD

nHeight: cho biết chiều cao của phông chữ, tính theo đơn vị logic. 0 là kích thước mặc
định.

nWidth: Chiều rộng trung bình các ký tự trong phông chữ, tính theo đơn vị logic. Nếu
thông số này bằng 0, thì tỷ lệ chiều rộng, cao của thiết bị xuất sẽ trùng khớp với tỷ lệ
chiều rộng, cao của các phông chữ có sẵn. Tuy nhiên trong ví dụ này, tôi set nWidth
bằng 16 để cho dễ nhìn so với chiều rộng mặc định (=0)


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status