当前位置:中国易下载软件教材中心文章中心编程语言汇编语言 → 汇编语言教学(5)

汇编语言教学(5)

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2007-8-21 1:04:19
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
喜欢这些内容嘛,请告诉你身边的朋友,易下载中心-QQ资源-itnetcn.com一起享受这份乐趣,本站内容来源互联网
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

第五课 学习更多关于“绘制”文本串的知识2tc海岸线网络安全资讯站
我们将做更多的实践去了解有关文本的诸多属性如字体和颜色等。 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
理论:2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
Windows 的颜色系统是用RGB值来表示的,R 代表红色,G 代表绿色,B 代表兰色。如果您想指定一种颜色就必须给该颜色赋相关的 RGB 值,RGB 的取值范围都是从 0 到 255,譬如您想要得到纯红色,就必须对RGB赋值(255,0,0),纯白色是 (255,255,255)。从我们下面的例子中您可以看出来要想运用好这套基于数字的颜色系统并不容易,这要求您必须对混色和颜色匹配有良好的感觉。2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
您可以用函数 SetTextColor 和 SetBkColor 来“绘制”背景色和字符颜色,但是必须传递一个“设备环境”的句柄和 RGB 值作为参数。RGB 的结构体的定义如下: 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
RGB_value struct2tc海岸线网络安全资讯站
unused db 02tc海岸线网络安全资讯站
blue db ?2tc海岸线网络安全资讯站
green db ?2tc海岸线网络安全资讯站
red db ?2tc海岸线网络安全资讯站
RGB_value ends2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
其中第一字节为 0 而且始终为 0,其它三个字节分别表示兰色、绿色和红色,刚好和 RGB 的次序相反。这个结构体用起来挺别扭,所以我们重新定义一个宏用它来代替。该宏接收红绿蓝三个参数,并在 eax 寄存器中返回 32 位的 RGB 值,宏的定义如下:2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
RGB macro red,green,blue2tc海岸线网络安全资讯站
xor eax,eax2tc海岸线网络安全资讯站
mov ah,blue2tc海岸线网络安全资讯站
shl eax,82tc海岸线网络安全资讯站
mov ah,green2tc海岸线网络安全资讯站
mov al,red2tc海岸线网络安全资讯站
endm 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
您可以把该宏放到头文件中以方便使用。 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
您可以调用 CreateFont 和 CreateFontIndirect 来创建自己的字体,这两个函数的差别是前者要求 您传递一系列的参数,而后着只要传递一个指向 LOGFONT 结构的指针。这样就使得后者使用起来更方便,尤其当您需要频繁创建字体时。在我们的例子中由于只要创建一种字体,故用 CreateFont 就足够了。在调用该函数后会返回所创建的字体的句柄,然后把该句柄选进“设备环境”使其成为当前字体,随后所有的“绘制”文本串的函数在被调用时都要把该句柄作为一个参数传递 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
例子:2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
.386 2tc海岸线网络安全资讯站
.model flat,stdcall 2tc海岸线网络安全资讯站
option casemap:none 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
include \masm32\include\windows.inc 2tc海岸线网络安全资讯站
include \masm32\include\user32.inc 2tc海岸线网络安全资讯站
include \masm32\include\kernel32.inc 2tc海岸线网络安全资讯站
include \masm32\include\gdi32.inc 2tc海岸线网络安全资讯站
includelib \masm32\lib\user32.lib 2tc海岸线网络安全资讯站
includelib \masm32\lib\kernel32.lib 2tc海岸线网络安全资讯站
includelib \masm32\lib\gdi32.lib 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
RGB macro red,green,blue 2tc海岸线网络安全资讯站
xor eax,eax 2tc海岸线网络安全资讯站
mov ah,blue 2tc海岸线网络安全资讯站
shl eax,8 2tc海岸线网络安全资讯站
mov ah,green 2tc海岸线网络安全资讯站
mov al,red 2tc海岸线网络安全资讯站
endm 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
.data 2tc海岸线网络安全资讯站
ClassName db "SimpleWinClass",0 2tc海岸线网络安全资讯站
AppName db "Our First Window",0 2tc海岸线网络安全资讯站
TestString db "Win32 assembly is great and easy!",0 2tc海岸线网络安全资讯站
FontName db "script",0 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
.data? 2tc海岸线网络安全资讯站
hInstance HINSTANCE ? 2tc海岸线网络安全资讯站
CommandLine LPSTR ? 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
.code 2tc海岸线网络安全资讯站
start: 2tc海岸线网络安全资讯站
invoke GetModuleHandle, NULL 2tc海岸线网络安全资讯站
mov hInstance,eax 2tc海岸线网络安全资讯站
invoke GetCommandLine2tc海岸线网络安全资讯站
mov CommandLine,eax2tc海岸线网络安全资讯站
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT 2tc海岸线网络安全资讯站
invoke ExitProcess,eax 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD 2tc海岸线网络安全资讯站
LOCAL wc:WNDCLASSEX 2tc海岸线网络安全资讯站
LOCAL msg:MSG 2tc海岸线网络安全资讯站
LOCAL hwnd:HWND 2tc海岸线网络安全资讯站
mov wc.cbSize,SIZEOF WNDCLASSEX 2tc海岸线网络安全资讯站
mov wc.style, CS_HREDRAW or CS_VREDRAW 2tc海岸线网络安全资讯站
mov wc.lpfnWndProc, OFFSET WndProc 2tc海岸线网络安全资讯站
mov wc.cbClsExtra,NULL 2tc海岸线网络安全资讯站
mov wc.cbWndExtra,NULL 2tc海岸线网络安全资讯站
push hInst 2tc海岸线网络安全资讯站
pop wc.hInstance 2tc海岸线网络安全资讯站
mov wc.hbrBackground,COLOR_WINDOW+1 2tc海岸线网络安全资讯站
mov wc.lpszMenuName,NULL 2tc海岸线网络安全资讯站
mov wc.lpszClassName,OFFSET ClassName 2tc海岸线网络安全资讯站
invoke LoadIcon,NULL,IDI_APPLICATION 2tc海岸线网络安全资讯站
mov wc.hIcon,eax 2tc海岸线网络安全资讯站
mov wc.hIconSm,eax 2tc海岸线网络安全资讯站
invoke LoadCursor,NULL,IDC_ARROW 2tc海岸线网络安全资讯站
mov wc.hCursor,eax 2tc海岸线网络安全资讯站
invoke RegisterClassEx, addr wc 2tc海岸线网络安全资讯站
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\ 2tc海岸线网络安全资讯站
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\ 2tc海岸线网络安全资讯站
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\ 2tc海岸线网络安全资讯站
hInst,NULL 2tc海岸线网络安全资讯站
mov hwnd,eax 2tc海岸线网络安全资讯站
invoke ShowWindow, hwnd,SW_SHOWNORMAL 2tc海岸线网络安全资讯站
invoke UpdateWindow, hwnd 2tc海岸线网络安全资讯站
.WHILE TRUE 2tc海岸线网络安全资讯站
invoke GetMessage, ADDR msg,NULL,0,0 2tc海岸线网络安全资讯站
.BREAK .IF (!eax) 2tc海岸线网络安全资讯站
invoke TranslateMessage, ADDR msg 2tc海岸线网络安全资讯站
invoke DispatchMessage, ADDR msg 2tc海岸线网络安全资讯站
.ENDW 2tc海岸线网络安全资讯站
mov eax,msg.wParam 2tc海岸线网络安全资讯站
ret 2tc海岸线网络安全资讯站
WinMain endp 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 2tc海岸线网络安全资讯站
LOCAL hdc:HDC 2tc海岸线网络安全资讯站
LOCAL ps:PAINTSTRUCT 2tc海岸线网络安全资讯站
LOCAL hfont:HFONT 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
.IF uMsg==WM_DESTROY 2tc海岸线网络安全资讯站
invoke PostQuitMessage,NULL 2tc海岸线网络安全资讯站
.ELSEIF uMsg==WM_PAINT 2tc海岸线网络安全资讯站
invoke BeginPaint,hWnd, ADDR ps 2tc海岸线网络安全资讯站
mov hdc,eax 2tc海岸线网络安全资讯站
invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,\ 2tc海岸线网络安全资讯站
OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,\ 2tc海岸线网络安全资讯站
DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,\ 2tc海岸线网络安全资讯站
ADDR FontName 2tc海岸线网络安全资讯站
invoke SelectObject, hdc, eax 2tc海岸线网络安全资讯站
mov hfont,eax 2tc海岸线网络安全资讯站
RGB 200,200,50 2tc海岸线网络安全资讯站
invoke SetTextColor,hdc,eax 2tc海岸线网络安全资讯站
RGB 0,0,255 2tc海岸线网络安全资讯站
invoke SetBkColor,hdc,eax 2tc海岸线网络安全资讯站
invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString 2tc海岸线网络安全资讯站
invoke SelectObject,hdc, hfont 2tc海岸线网络安全资讯站
invoke EndPaint,hWnd, ADDR ps 2tc海岸线网络安全资讯站
.ELSE 2tc海岸线网络安全资讯站
invoke DefWindowProc,hWnd,uMsg,wParam,lParam 2tc海岸线网络安全资讯站
ret 2tc海岸线网络安全资讯站
.ENDIF 2tc海岸线网络安全资讯站
xor eax,eax 2tc海岸线网络安全资讯站
ret 2tc海岸线网络安全资讯站
WndProc endp 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
end start 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
分析:2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
CreateFont 函数产生一种逻辑字体,它尽可能地接近参数中指定的各相关值。这个函数大概是所有 Windows API函数中所带参数最多的一个。它返回一个指向逻辑字体的句柄供调用 SelectObject 函数使用。下面我们详细讲解该函数的参数:2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
CreateFont proto \2tc海岸线网络安全资讯站
nHeight:DWORD,\2tc海岸线网络安全资讯站
nWidth:DWORD,\2tc海岸线网络安全资讯站
nEscapement:DWORD,\2tc海岸线网络安全资讯站
nOrientation:DWORD,\2tc海岸线网络安全资讯站
nWeight:DWORD,\ 2tc海岸线网络安全资讯站
cItalic:DWORD,\ 2tc海岸线网络安全资讯站
cUnderline:DWORD,\2tc海岸线网络安全资讯站
cStrikeOut:DWORD,\2tc海岸线网络安全资讯站
cCharSet:DWORD,\2tc海岸线网络安全资讯站
cOutputPrecision:DWORD,\2tc海岸线网络安全资讯站
cClipPrecision:DWORD,\2tc海岸线网络安全资讯站
cQuality:DWORD,\2tc海岸线网络安全资讯站
cPitchAndFamily:DWORD,\2tc海岸线网络安全资讯站
lpFacename:DWORD2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
nHeight: 希望使用的字体的高度,0为缺省。2tc海岸线网络安全资讯站
nWidth: 希望使用的字体的宽度,一般情况下最好用0, 这样 Windows 将会自动为您选择一个和高度匹配的值。因为在我们的例子中那样做的话会使得字符因太小而无法显示,所以 我 们设定它为16。2tc海岸线网络安全资讯站
nEscapement: 每一个字符相对前一个字符的旋转角度,一般设成0。900代表转90度,1800转190度,2700转270度。2tc海岸线网络安全资讯站
nOrientation: 字体的方向。2tc海岸线网络安全资讯站
nWeight: 字体笔画的粗细。2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
Windows 为我们预定义了如下值: 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
FW_DONTCARE 等于 02tc海岸线网络安全资讯站
FW_THIN 等于 1002tc海岸线网络安全资讯站
FW_EXTRALIGHT 等于 2002tc海岸线网络安全资讯站
FW_ULTRALIGHT 等于 2002tc海岸线网络安全资讯站
FW_LIGHT 等于 3002tc海岸线网络安全资讯站
FW_NORMAL 等于 4002tc海岸线网络安全资讯站
FW_REGULAR 等于 4002tc海岸线网络安全资讯站
FW_MEDIUM 等于 5002tc海岸线网络安全资讯站
FW_SEMIBOLD 等于 6002tc海岸线网络安全资讯站
FW_DEMIBOLD 等于 6002tc海岸线网络安全资讯站
FW_BOLD 等于 7002tc海岸线网络安全资讯站
FW_EXTRABOLD 等于 8002tc海岸线网络安全资讯站
FW_ULTRABOLD 等于 8002tc海岸线网络安全资讯站
FW_HEAVY 等于 9002tc海岸线网络安全资讯站
FW_BLACK 等于 9002tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
cItalic: 0为正常,其它值为斜体。 2tc海岸线网络安全资讯站
cUnderline: 0为正常,其它值为有下划线。2tc海岸线网络安全资讯站
cStrikeOut: 0为正常,其它值为删除线。2tc海岸线网络安全资讯站
cCharSet: 字体的字符集。一般选择OEM_CHARSET,它使得 Windows 会选用和操作系统相关的字符集。2tc海岸线网络安全资讯站
cOutputPrecision: 指定我们选择的字体接近真实字体的精度。 一般选用OUT_DEFAULT_PRECIS,它决定了缺省的映射方式。2tc海岸线网络安全资讯站
cClipPrecision: 指定我们选择的字体在超出裁剪区域时的裁剪精度。 一般选用CLIP_DEFAULT_PRECIS,它决定了裁剪精度。2tc海岸线网络安全资讯站
cQuality: 指定输出字体的质量。它指出GDI应如何尽可能的接近真实 字体,一共有三种方式:DEFAULT_QUALITY, PROOF_QUALITY 和DRAFT_QUALITY。2tc海岸线网络安全资讯站
cPitchAndFamily:字型和字体家族。2tc海岸线网络安全资讯站
lpFacename: 指定字体的名称。 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
上面的描述不一定好理解,您如果要的到更多的信息,应参考 WIN32 API 指南。 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
invoke SelectObject, hdc, eax2tc海岸线网络安全资讯站
mov hfont,eax2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
在我们得到了指向逻辑字体的句柄后必须调用 SelectObject 函数把它选择进“设备环境”,我们还可以调用该函数把诸如此类的像颜色、笔、画刷 等GDI对象选进“设备环境”。该函数会返回一个旧的“设备环境”的句柄。您必须保存该句柄,以便在完成“绘制”工作后再把它选回。在调用 SelectObject 函数后一切的绘制函数都是针对该“设备环境”的。 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
RGB 200,200,502tc海岸线网络安全资讯站
invoke SetTextColor,hdc,eax2tc海岸线网络安全资讯站
RGB 0,0,255 2tc海岸线网络安全资讯站
invoke SetBkColor,hdc,eax2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
我们用宏 RGB 产生颜色,然后分别调用 SetTextColor 和 SetBkColor。2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
我们调用 TextOut 在客户区用我们前面选定的字体和颜色“绘制”文本串。 2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
invoke SelectObject,hdc, hfont2tc海岸线网络安全资讯站
2tc海岸线网络安全资讯站
在我们“绘制”完成后,必须恢复“设备环境”。我们必须每一次都这么做。2tc海岸线网络安全资讯站