SelectObject,DeleteObject,DeleteDC的一些注释

本文探讨了Bitmap对象在不同场景下的使用技巧与注意事项,特别是deleteObject方法的调用时机,这对于避免内存泄漏至关重要。通过几个具体案例和技术讨论,帮助开发者更好地理解和掌握Bitmap资源的有效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <windows.h> #include <cmath> // 双缓冲绘图 HDC hdcBuffer; HBITMAP hbmBuffer; RECT rect; // 颜色转换函数 COLORREF HSLtoRGB(float h, float s, float l) { /*...*/ } // 窗口过程 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); // 获取时间参数 static float t = 0.0f; t += 0.01f; // 初始化缓冲 hdcBuffer = CreateCompatibleDC(hdc); GetClientRect(hwnd, &rect); hbmBuffer = CreateCompatibleBitmap(hdc, rect.right, rect.bottom); SelectObject(hdcBuffer, hbmBuffer); // 绘制背景 FillRect(hdcBuffer, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH)); // 绘制爱心 const float a = 50.0f; // 基础大小 for(float θ = 0; θ < 6.283; θ += 0.001f) { float r = a * (1 - sin(θ)); // 动态参数 float scale = 1.0f + 0.1f * sin(t * 5.0f); // 心跳效果 float phase = t * 2.0f; // 颜色相位 // 坐标变换 int x = scale * r * cos(θ) + rect.right/2; int y = -scale * r * sin(θ) + rect.bottom/2; // 设置彩虹颜色 SetPixel(hdcBuffer, x, y, HSLtoRGB(fmod(θ*30 + phase, 360), 1.0f, 0.5f)); } // 交换缓冲 BitBlt(hdc, 0, 0, rect.right, rect.bottom, hdcBuffer, 0, 0, SRCCOPY); // 清理资源 DeleteDC(hdcBuffer); DeleteObject(hbmBuffer); EndPaint(hwnd, &ps); InvalidateRect(hwnd, NULL, FALSE); // 持续重绘 break; } //...其他消息处理 } return DefWindowProc(hwnd, msg, wParam, lParam); } // 主函数 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow) { //...窗口创建代码 } 此代码报错
最新发布
03-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值