#include<windows.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE HPrevInst,
LPSTR lpszCmdLine,
int nCmdShow
)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="文本输出";
char lpszTitle[]="EXAMPLE FOR THE TEXT OUTPUT";
wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
wndclass.lpszClassName=lpszClassName;
wndclass.lpszMenuName=NULL;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hwnd=CreateWindow
(
lpszClassName,
lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc
(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
HDC hdc;
HFONT hF_black,hF_big;//定义两种字体句柄
PAINTSTRUCT ps;
TEXTMETRIC tm;//定义一个TEXTMETRIC结构,用以记录字体信息
char lpsz_1[]="这是一行红色的、字体为SYSTEM_FONT的文字,红色代表未来。";
char lpsz_2[]="现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。";
char lpsz_3[]="现在展现在你面前的是蓝色的粗体字,蓝色代表广阔的海洋和天空。";
char lpsz_4[]="当前字体为大号、斜体并带有下划线的文字。";
char lpsz_5[]="现在你掌握了字体的操作了吗?";
char lpsz_6[]="祝你成功";
int X=0,Y=0;
SIZE size; //定义一个SIZE类型的结构
switch(message){
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SetTextColor(hdc,RGB(255,0,0)); //设置文本颜色为红色
GetTextMetrics(hdc,&tm);//设置默认字体,写入tm结构中
TextOut(hdc,X,Y,lpsz_1,strlen(lpsz_1));//使用当前字体输出文本
Y=Y+tm.tmHeight+100*tm.tmExternalLeading;//计算换行时下一行文本的输出坐标
//创建自定义字体
hF_black=CreateFont
(
20, //字体的宽度
0, //由系统根据高度比选取字体最佳宽度值
0, //文本的倾斜度为0,表示水平
0, //字体的倾斜度为0
FW_HEAVY, //字体的粗度,FW_HEAVY为最粗
0, //非斜体字
0, //无下划线
0, //无删除线
ANSI_CHARSET, //表示所用的字符集为ANSI_CHARSET
OUT_DEFAULT_PRECIS, //输出精度为默认精度
CLIP_DEFAULT_PRECIS, //剪裁精度为默认精度
DEFAULT_QUALITY, //输出质量为默认值
DEFAULT_PITCH|FF_DONTCARE, //字体距和字体系列使用默认值
"粗体字" //字体名称
);
SetTextColor(hdc,RGB(0,255,0));//设置文本颜色为绿色
SelectObject(hdc,hF_black); //将自定义字体选入设备描述表
GetTextMetrics(hdc,&tm);//获取字体的消息,并写入tm结构中
TextOut(hdc,X,Y,lpsz_2,strlen(lpsz_2));//使用当前字体输出文本
//换行继续输出文本,计算新行的起始Y坐标位置
Y=Y=tm.tmHeight+10*tm.tmExternalLeading;
GetTextExtentPoint32(hdc,lpsz_2,strlen(lpsz_2),&size);//获取字符串的宽度
SetTextColor(hdc,RGB(0,0,255));//设置文本颜色为蓝色
TextOut(hdc,X,Y,lpsz_3,strlen(lpsz_3));//用当前字体输出文本
X=0; //计算下一行文本的输出起始坐标
Y=Y+tm.tmHeight+20*tm.tmExternalLeading;
hF_big=CreateFont //引入新字体
(
30, //字体高度
0,
0,
0,
FW_NORMAL,
1, //定义斜体
1, //定义输出时带下划线
0,
ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_DONTCARE,
"大号字"
);
SelectObject(hdc,hF_big);//将第二种自定义字体选入设备描述表
SetTextColor(hdc,RGB(155,155,155));//设置文本颜色为灰色
Y=Y+tm.tmHeight+20*tm.tmExternalLeading;
TextOut(hdc,X,Y,lpsz_4,strlen(lpsz_4));//以当前字体输出文本
SetTextColor(hdc,RGB(255,0,0));//设置文本颜色为红色
X=0; //设定输出文本的X坐标位置
Y=Y+tm.tmHeight+30*tm.tmExternalLeading;
TextOut(hdc,X,Y,lpsz_5,strlen(lpsz_5));//输出文本
//在该行继续输出文本
GetTextExtentPoint32(hdc,lpsz_5,strlen(lpsz_5),&size);//获取字符串的宽度
X=X+size.cx; //获取起始坐标
TextOut(hdc,X,Y,lpsz_6,strlen(lpsz_6));//输出文本
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
DeleteObject(hF_black);//退出窗口时删除自定义字体
DeleteObject(hF_big);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}