#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.lpszMenuName = NULL ;
wndclass.lpszClassName = lpszClassName ;
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+tm.tmExternalLeading;//计算换行时下一行文本的输出坐标
hF_black=CreateFont //创建自定义字体
(
20, //字体的高度
0, //由系统根据高宽比选取字体最佳宽度值
0, //文本的倾斜度为0,表示水平
0, //字体的倾斜度为0
FW_HEAVY, //字体的粗度,FW_HEAVY为最粗
0, //非斜体字
0, //无下划线
0, //无删除线
GB2312_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+tm.tmHeight+5*tm.tmExternalLeading;
//换行继续输出文本,计算新行的起始Y坐标位置
GetTextExtentPoint32(hdc,lpsz_2,strlen(lpsz_2),&size);
//获取字符串的宽度
SetTextColor(hdc,RGB(0,0,255)); //设置文本颜色为蓝色
TextOut(hdc,X,Y,lpsz_3,strlen(lpsz_3)); //用当前字体输出文本
Y=Y+tm.tmHeight+5*tm.tmExternalLeading;
hF_big=CreateFont //引入新字体
(
30, //字体高度
0,
0,
0,
FW_NORMAL,
1, //定义斜体
1, //定义输出时带下划线
0,
GB2312_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+5*tm.tmExternalLeading;
TextOut(hdc,X,Y,lpsz_4,strlen(lpsz_4)); //以当前字体输出文本
SetTextColor(hdc,RGB(255,0,0)); //设置文本颜色为红色
Y=Y+tm.tmHeight+10*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+5,Y,lpsz_6,strlen(lpsz_6)); //输出文本
EndPaint(hwnd,&ps);
DeleteObject(hF_black); //删除自定义字体句柄
DeleteObject(hF_big);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
MOOC清华《VC++面向对象与可视化程序设计》第3章:Windows文本-例(2)字体、颜色、下划线
最新推荐文章于 2021-03-18 14:14:34 发布