主目录传送门
https://blog.csdn.net/zb774095236/article/details/108291755
本次学习的源码模板下载:
1.百度云:https://pan.baidu.com/s/1B0YuPWgSxvLTHk59STzQQQ 提取码:1ins
学习目标:
在Win32API-13-14-窗口关闭和窗口显示文字版本上学习更多的文字绘制方式
学习内容:
一、 项目参考
新增函数解释 DrawText
1. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-drawtext Microsoft官方函数文档
2. https://blog.csdn.net/caimouse/article/details/1761276 大牛的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 rcText;
#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, "Hello, Windows!", 15);#if New_Add//显示不全.rcText.left = 10;rcText.top = 30;rcText.right = 100;rcText.bottom = 50;DrawText(hdc, _T("Hello, Windows!"), 15, &rcText,DT_LEFT | DT_SINGLELINE | DT_END_ELLIPSIS);//完全显示,左对齐.rcText.left = 10;rcText.top = 50;rcText.right = 300;rcText.bottom = 80;DrawText(hdc, "Hello, Windows!", 15, &rcText,DT_LEFT | DT_SINGLELINE | DT_END_ELLIPSIS);SetTextColor(hdc, RGB(0, 0, 255));//完全显示,右对齐.rcText.left = 10;rcText.top = 80;rcText.right = 300;rcText.bottom = 110;DrawText(hdc, _T("A&bcd"), 6, &rcText,DT_RIGHT | DT_SINGLELINE | DT_END_ELLIPSIS);
#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/16ifwY12tTciRfyY9KgDCvw 提取码:38eu
留在最后
你可以通过查找宏 New_Add 来发现新增的代码段