字体颜色和字体样式的演示

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
int nCmdShow
)
{
MSG Msg;
HWND hwnd;
WNDCLASS wndclass;
char lpszClassName[] = "窗体";
//是这个窗口的类名wndclass,不是窗口左上角的那个
char lpszTitle[] = "My Window";
HBRUSH hbrush;
hbrush = CreateSolidBrush(RGB(0, 255, 0));//定义绿色画刷

wndclass.style = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = hbrush;
//空值背景颜色,可用自定义画刷来调,绿色背景
wndclass.hInstance = hInstance;
wndclass.lpszClassName = lpszClassName;
wndclass.lpszMenuName = NULL;

if (!RegisterClass(&wndclass)) {
MessageBeep(0);
return 0;
}

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;

//定义6个字符数组
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;
//获取下一次输入的Y坐标

//创建一个自定义字体
hF_black = CreateFont(
20,
0,
0,
0,
FW_HEAVY,
0,
0,
0,
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 + 10 * 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 + 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));
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; // 获取初始X坐标,X时上一个串结尾的X坐标
TextOut(hdc, X, Y, lpsz_6, strlen(lpsz_6));

EndPaint(hwnd, &ps);
DeleteObject(hF_black);
DeleteObject(hF_big);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
//break很重要,没有的话窗口会址闪一下,因为直接执行完
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}

 

 

 

posted @ 2020-09-25 18:36  nanfengnan  阅读(352)  评论(0编辑  收藏  举报