Windows API一日一练(25)CreateSolidBrush FillRect函数-创建黑色的背景色

tech2024-10-26  23

主目录传送门

https://blog.csdn.net/zb774095236/article/details/108291755

本次学习的源码模板下载:

1.百度云:https://pan.baidu.com/s/1B0YuPWgSxvLTHk59STzQQQ  提取码:1ins

学习目标:

在Win32API-13-14-窗口关闭和窗口显示文字版本上改变一块区域的背景色

 


学习内容:

一、 项目参考  

新增函数解释 CreateSolidBrush FillRect

1. https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-createsolidbrush Microsoft官方函数文档

2. https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-fillrect    Microsoft官方函数文档

3. https://docs.microsoft.com/en-us/windows/win32/gdi/creating-colored-pens-and-brushes 官方使用例子

4. https://docs.microsoft.com/en-us/windows/win32/gdi/using-rectangles 官方使用例子

5.https://blog.csdn.net/caimouse/article/details/1764559  大牛的Win32系列

 

二. 在往期模板上修改和新增的步骤 1.代码段

//库文件 #include "Windows.h" #include "tchar.h" #define New_Add 0x01 //后续将采用宏定义的方式来标记新增代码段 LRESULT CALLBACK MainWndProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam) // second message parameter { PAINTSTRUCT ps; HDC hdc; #if New_Add COLORREF crOld; RECT rcText; HBRUSH hbrush; #endif switch (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 crOld = SetTextColor(hdc, RGB(255, 0, 0)); rcText.left = 10; rcText.top = 30; rcText.right = 300; rcText.bottom = 80; //创建黑色的画刷, hbrush = CreateSolidBrush(RGB(0, 0, 0)); //用黑色的画刷填充四边形的颜色. FillRect(hdc, &rcText, hbrush); //删除画刷. DeleteObject(hbrush); //显示字符串在四边形的中间位置. DrawText(hdc, _T("Hello, Windows!"), 15, &rcText, DT_CENTER | DT_VCENTER | DT_SINGLELINE | DT_END_ELLIPSIS); //恢复原来的颜色. SetTextColor(hdc, crOld); #endif EndPaint(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; //附加参数,通常情况下为0 wc.cbWndExtra = 0; //附加参数,通常情况下为0 wc.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"); //窗口菜单名称,这里没有菜单,设为NULL wc.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, //该窗口的父窗口或所有者窗口的句柄,这里用不到,设为NULL NULL, //窗口菜单句柄,这里没有菜单,设置为NULL hInstance, //窗口句柄 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/1WFoQYbDBypI7bs-2L5VkOA 提取码:zj9p

留在最后

      你可以通过查找宏 New_Add 来发现新增的代码段

最新回复(0)