不同格式字体+右对齐
//windows.h文件中包含应用程序中所需的数据类型和数据结构的定义 #include <windows.h> #include <stdlib.h> #include <time.h> #include <string.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[] = "My_Windows"; //窗口标题名 //窗口类的定义 wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口类型为默认类型 wndclass.lpfnWndProc = WndProc; //窗口处理函数为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; RECT rect; PAINTSTRUCT Ps; TEXTMETRIC tm; HFONT hf_black, hf_big; SIZE Sz; COLORREF color[7] = {RGB(255,0,0), RGB(255,165,0), RGB(255,255,0), RGB(0,255,0), RGB(0,255,255), RGB(0,0,255), RGB(139,0,255)}; int x = 0, y = 0; char a[255]; static char *textbuf[]= { "wvwwvwvwwvww这是一行红色SYSTEM_FONT的字vwvwvwwvwvwvwvvw", "wvwwvwvwwvwwvwvvw这是一行绿色的字vwwvvwvwvwvwwvwvwvwvvw", "wvwwvwvwwvwwvwvvw这是一行蓝粗的字vwwvvwvwvwvwwvwvwvwvvw", "wvwwvwvwwvwvwv这是一行大斜带线灰的字vwwvvwvwvwvwvwvwvvw", "wvwwvwvwwvwwvwvvw看来我掌握了操作,", "我真厉害!wwvwvwvvwvwvwvwwvwvwvwvvw" }; switch(message) { case WM_PAINT: hDC = BeginPaint(hWnd, &Ps); GetClientRect(hWnd, &rect); SetTextColor(hDC, color[0]); //设置文本颜色为红色 GetTextMetrics(hDC, &tm); //获取缺省字体写入tm GetClientRect(hWnd, &rect); //获取要输出的x坐标 GetTextExtentPoint32(hDC, textbuf[0], strlen(textbuf[0]), &Sz); //用缺省字体输出第一行文本 TextOut(hDC, rect.right-Sz.cx, y, textbuf[0], strlen(textbuf[0])); //换行继续输出文本,计算x的起始坐标位置 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, color[3]); //设置文本颜色为绿色 SelectObject(hDC, hf_black); //将自定义字体绑定 GetTextMetrics(hDC, &tm); //获取字体信息,写入tm结构中 //获取要输出的x坐标 GetTextExtentPoint32(hDC, textbuf[1], strlen(textbuf[1]), &Sz); //用缺省字体输出第二行文本 TextOut(hDC, rect.right-Sz.cx, y, textbuf[1], strlen(textbuf[1])); y = y + tm.tmHeight + 10*tm.tmExternalLeading; //------------------------------------------------------------------------- SetTextColor(hDC, color[5]);//设置文本颜色为蓝色 //获取要输出的x坐标 GetTextExtentPoint32(hDC, textbuf[2], strlen(textbuf[2]), &Sz); //用缺省字体输出第一行文本 TextOut(hDC, rect.right-Sz.cx, y, textbuf[2], strlen(textbuf[2])); //到下一行 y = y + tm.tmHeight+100*tm.tmExternalLeading; //------------------------------------------------------------------------- hf_big = CreateFont( //创建自定义字体 30, //字体的高度 0, //由系统根据高宽比选取字体最佳宽度值 0, //文本的倾斜度为0,表示水平 0, //字体的倾斜度为0 FW_NORMAL, //字体的粗度,FW_HEAVY为最粗 1, // 非斜体字 / 斜体字 1, // 无下划线 / 下划线 0, // 无删除线 / 删除线 ANSI_CHARSET, //表示所用的字符集为ANSI_CHARSET OUT_DEFAULT_PRECIS, //输出精度为缺省精度 CLIP_DEFAULT_PRECIS, //剪裁精度为缺省精度 DEFAULT_QUALITY, //输出质量为缺省值 DEFAULT_PITCH |FF_DONTCARE, //字间距和字体系列使用缺省值 "大号字"); //字体名称 SetTextColor(hDC, RGB(155,155,155)); //设置文本颜色为绿色 SelectObject(hDC, hf_big); //将自定义字体绑定 //tm还是之前的绑的 y = y + tm.tmHeight+200*tm.tmExternalLeading; //获取要输出的x坐标 GetTextExtentPoint32(hDC, textbuf[3], strlen(textbuf[3]), &Sz); //用缺省字体输出第一行文本 TextOut(hDC, rect.right-Sz.cx, y, textbuf[3], strlen(textbuf[3])); GetTextMetrics(hDC, &tm); //获取字体信息,写入tm结构中 y = y + tm.tmHeight + 30*tm.tmExternalLeading; //------------------------------------------------------------------------- //当前字体输出第五行 SetTextColor(hDC, color[6]); //设置文本颜色为绿色 SelectObject(hDC, hf_big); //将自定义字体绑定 //获取要输出的x坐标 GetTextExtentPoint32(hDC, textbuf[4], strlen(textbuf[4]), &Sz); x = rect.right - Sz.cx; GetTextExtentPoint32(hDC, textbuf[5], strlen(textbuf[5]), &Sz); x -= Sz.cx; //用缺省字体输出第一行文本 TextOut(hDC, x, y, textbuf[4], strlen(textbuf[4])); //-------------------------------------------------------------------------- //在第五行后面输出字 //获取文字输出位置 GetTextExtentPoint32(hDC, textbuf[4], strlen(textbuf[4]), &Sz); x = x+Sz.cx; //输出第六个文本 TextOut(hDC, x, y, textbuf[5], strlen(textbuf[5])); //-------------------------------------------------------------------------- DeleteObject(hf_black); DeleteObject(hf_big); EndPaint(hWnd, &Ps); return 0; case WM_DESTROY: PostQuitMessage(0); //调用 PostQuitMessage 发出 WM_QUIT 消息 return 0; default: return DefWindowProc(hWnd, message, wParam, lParam); //默认时采用系统消息默认处理函数 } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人