Windows API一日一练(28-29)CreateFont SetRect SelectObject DeleteObject函数-用各种不同的字体并进行文字绘制并注意释放
主目录传送门
https://blog.csdn.net/zb774095236/article/details/108291755
本次学习的源码模板下载:
1.百度云:https://pan.baidu.com/s/1B0YuPWgSxvLTHk59STzQQQ 提取码:1ins
学习目标:
在Win32API-13-14-窗口关闭和窗口显示文字版本上尝试使用各种不同的字体来进行不同的字体显示
学习内容:
一、 项目参考
新增函数解释 CreateFont SetRect SelectObject DeleteObject
1. https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createfonta Microsoft官方函数文档
2. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setrect Microsoft官方函数文档
3. https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-selectobject Microsoft官方函数文档
4. https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-selectobject Microsoft官方函数文档
5.https://blog.csdn.net/caimouse/article/details/1770966 大牛的Win32系列
6.https://blog.csdn.net/caimouse/article/details/1773850 大牛的Win32系列
二. 在往期模板上修改和新增的步骤
1.代码段
//库文件
#include "Windows.h"
#include "tchar.h"#define New_Add 0x01 //后续将采用宏定义的方式来标记新增代码段LRESULT CALLBACK MainWndProc(HWND hwnd, // handle to window UINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam) // second message parameter
{PAINTSTRUCT ps;HDC hdc;#if New_AddCOLORREF crOld;RECT rect;HFONT hFont;int nOldMode;
#endifswitch (uMsg){case WM_CREATE:// Initialize the window. return 0;case WM_PAINT:// Paint the window's client area. hdc = BeginPaint(hwnd, &ps);//TextOut(hdc, 0, 0, _T("Hello, Windows!"), 15);//注释了#if New_Add//逻辑单元是与设备相关的像素,因此这将创建一个48像素高的逻辑字体的句柄。//宽度设置为0时,字体映射器会选择最接近的匹配值。//字体的正面名称将受到影响hFont = CreateFont(48, 0, 0, 0, FW_DONTCARE, FALSE, TRUE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, VARIABLE_PITCH, TEXT("Impact"));SelectObject(hdc, hFont);//设置文本要在其中进行格式化的矩形的坐标.SetRect(&rect, 100, 100, 700, 200);SetTextColor(hdc, RGB(255, 0, 0));DrawText(hdc, TEXT("Drawing Text with Impact"), -1, &rect, DT_NOCLIP);//逻辑单元是与设备相关的像素,因此这将创建一个36像素高的逻辑字体的句柄。//当宽度设置为20时,字体映射器将选择一种字体,在本例中,这种字体是拉伸的。//字体名称为Times New Roman。此时旋转角度为-300十分之一度(-30度)hFont = CreateFont(36, 20, -300, 0, FW_DONTCARE, FALSE, TRUE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, VARIABLE_PITCH, TEXT("Times New Roman"));SelectObject(hdc, hFont);//设置文本要在其中进行格式化的矩形的坐标.SetRect(&rect, 100, 200, 500, 300);SetTextColor(hdc, RGB(0, 128, 0));DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1, &rect, DT_NOCLIP);//逻辑单元是与设备相关的像素,因此这将创建一个36像素高的逻辑字体的句柄。//当宽度设置为10时,字体映射器将选择一种字体,在本例中,这种字体是被压缩的。//字体名称为Arial。此时的旋转角度为250 / 10度(25度)hFont = CreateFont(36, 10, 250, 0, FW_DONTCARE, FALSE, TRUE, FALSE, DEFAULT_CHARSET, OUT_OUTLINE_PRECIS,CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, VARIABLE_PITCH, TEXT("Arial"));SelectObject(hdc, hFont);//设置文本要在其中格式化的矩形的坐标。SetRect(&rect, 500, 200, 1400, 600);SetTextColor(hdc, RGB(0, 0, 255));DrawText(hdc, TEXT("Drawing Text with Arial"), -1, &rect, DT_NOCLIP);DeleteObject(hFont);
#endifEndPaint(hwnd, &ps);return 0;case WM_SIZE:// Set the size and position of the window. return 0;case WM_DESTROY:// Clean up window-specific data objects. PostQuitMessage(0);return 0;// // Process other messages. // default:return DefWindowProc(hwnd, uMsg, wParam, lParam);//系统的默认消息处理函数}return 0;
}//定义WinMain的入口
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
{//没有这些参数也不会发生警告//UNREFERENCED_PARAMETER(hInstance);UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);//UNREFERENCED_PARAMETER(nCmdShow);WNDCLASS wc; //创建窗口类对象//1.对窗口类的各属性进行初始化wc.style = CS_HREDRAW | CS_VREDRAW; /*窗口类的风格,CS前缀,C表示Class,S表示Style,这里使用了水平和垂直风格*/wc.lpfnWndProc = MainWndProc; /*这里将回到函数的名字赋值用以windows后面回调*/wc.cbClsExtra = 0; //附加参数,通常情况下为0wc.cbWndExtra = 0; //附加参数,通常情况下为0wc.hInstance = hInstance; //窗口句柄,这里将WinMain中的hInstance句柄赋值就可wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /*窗口图标,LoadIcon()是加载图标,这里是加载一个系统资源图标,LoadIcon()的原型是HICON LoadIcon(HINSTANCE, LPCSTR);*/wc.hCursor = LoadCursor(NULL, IDC_ARROW); /*加载鼠标,同上相似*/wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); /*窗口画刷,这里是使用的白色画刷,所以创建出来的窗口的背景颜色则是白色的*/wc.lpszMenuName = _T("MainMenu"); //窗口菜单名称,这里没有菜单,设为NULLwc.lpszClassName = _T("MainWindowClass"); //窗口类名称,这个窗口类名称可作为这个窗口的唯一标识/*注册窗口类*/if (!RegisterClass(&wc)){//注册窗口类失败时,弹出提示MessageBox(NULL, TEXT("This program requires Window NT!"), _T("MainWindowClass"), MB_ICONERROR);return FALSE;}/*创建窗口HWND CreateWindow(LPCTSTR lpClassName, //窗口类名LPCTSTR lpWindowName, //窗口标题DWORD dwStyle, //窗口风格,WS开头int x, //窗口左上角x坐标int y, //窗口左上角y坐标int nWidth, //窗口宽度int nHeight, //窗口高度HWND hWndParent, //父窗口句柄HMENU hMenu, //菜单句柄HANDLE hlnstance, //窗口句柄LPVOID lpParam); //改值会传递给窗口WM_CREATE消息的一个参数*/HWND hwnd; //2.创建窗口函数CreateWindow()会返回一个HWND句柄,这里定义下,用来接收这个句柄hwnd = CreateWindow(_T("MainWindowClass"), //窗口类名TEXT(" Hello Win32API"), //窗口标题,会在窗口的左上角标题栏显示WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL, //窗口风格CW_USEDEFAULT, //窗口左上角x位置,这里使用的系统默认值,可自定义CW_USEDEFAULT, //窗口左上角y位置CW_USEDEFAULT, //窗口的宽度CW_USEDEFAULT, //窗口的高度NULL, //该窗口的父窗口或所有者窗口的句柄,这里用不到,设为NULLNULL, //窗口菜单句柄,这里没有菜单,设置为NULLhInstance, //窗口句柄NULL //传递给窗口WM_CREATE消息的一个参数,这里不用,设置为NULL);/*3.显示窗口,显示方式使用WinMain的参数*/ShowWindow(hwnd, nCmdShow);/*4.更新窗口*/UpdateWindow(hwnd);MSG msg;// 5.主消息循环:while (GetMessage(&msg, nullptr, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;}
项目下载地址:
1.百度云:https://pan.baidu.com/s/1CRxjekDJ8TvhX_8sBNG3Xw 提取码:lutz
留在最后
你可以通过查找宏 New_Add 来发现新增的代码段
Windows API一日一练(28-29)CreateFont SetRect SelectObject DeleteObject函数-用各种不同的字体并进行文字绘制并注意释放相关推荐
- Windows API一日一练(28)CreateFont函数
文字的出现历史可以追溯到甲骨文的使用,直到今天使用的宋体文字.在软件开发里,经常遇到是跨国语言的使用,由于世界在变平,全球在变小,交通运输非常发达,由我所在的深圳,向东坐飞机12个小时就可以到达伦敦, ...
- Windows API一日一练(一)第一个应用程序 使用应用程序句柄 使用命令行参数 MessageBox函数 RegisterClass和RegisterClassEx函数
要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...
- Windows API一日一练(29)SelectObject和DeleteObject函数
Windows 显示设备的属性,共有下面几种:位图.画刷.字体.画笔.区域.如果要设置它们到当前设备里,就需要使用 SelectObject 函数,比如上面介绍的字体设置,就会用到这个函数.当你创建一 ...
- Windows API一日一练 29 SelectObject和DeleteObject函数
Windows 显示设备的属性,共有下面几种:位图.画刷.字体.画笔.区域.如果要设置它们到当前设备里,就需要使用 SelectObject 函数,比如上面介绍的字体设置,就会用到这个函数.当你创建一 ...
- Windows API一日一练(1)第一个应用程序
要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们.现在就来编写一个最简单的 ...
- Windows API一日一练(2)使用应用程序句柄
从上面这段程序就可以看到,_tWinMain是应用程序的入口函数,这里是使用它的宏,定义在tchar.h头文件里,为什么要这样作宏定义的呢?由于Windows的应用程序要适应UNICODE和以前单字符 ...
- Windows API一日一练(20)LoadIcon和LoadCursor函数-程序图标设置和鼠标的样式
主目录传送门 https://blog.csdn.net/zb774095236/article/details/108291755 本次学习的源码模板下载: 1.百度云:https://pan.ba ...
- Windows API一日一练 59 CreateFileMapping和MapViewOfFile函数
在开发软件过程里,也经常碰到进程间共享数据的需求.比如 A 进程创建计算数据, B 进程进行显示数据的图形.这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开 ...
- Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数
在开发软件过程里,也经常碰到进程间共享数据的需求.比如 A 进程创建计算数据, B 进程进行显示数据的图形.这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开 ...
最新文章
- windows AD/DNS服务器搭建
- 师兄送福利:蓝牙调试工具使用教程
- P6478-[NOI Online #2 提高组]游戏【dp,二项式反演】
- 麦芒装饰装修小程序源码V3.2.59
- java的mysql语句规范_常用的标准SQL 语句
- Android学习笔记:短信控制手机之“短信开启定位”
- [2013.9.6]说说Win7的Aero效果
- 深度相机---(1)TOF总结
- 前端技术规划与战略:2022
- 公司版苹果开发者账号注册申请流程
- 树莓派到手第一步:上电启动、安装中文字体、虚拟键盘、开启SSH等
- NBUT 1451 Elise (暴力+并查集)
- vuecli打包后html文件没有压缩的问题
- 大话设计模式 第二十三章 命令模式 考羊肉串
- 计算机应用中兴5G通讯是什么,中兴通讯自曝5G成绩单:承建全国三成以上5G网络...
- html框架iframe菜鸟,HTML DOM Frame/IFrame frameBorder 属性 | 菜鸟教程
- HTML语言如何建立浮动窗,HTML基础之框架和浮动窗口
- RAGE来咯~ megatexture技术介绍
- bp神经网络是用来干嘛的,bp神经网络的应用领域
- 《斜杠青年:如何开启你的多重身份》读书笔记