GetStockObject()

本文介绍了GetStockObject函数的声明及用途,包括如何通过该函数获取画刷句柄,并举例说明了如何为窗口背景指定黑色画刷句柄。此外,还简要提到了透明画刷的概念及其实现方式。

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

1.GetStockObject的声明:

      HGDIOBJ GetStockObject( int fnObject // stock object type);参数fnObject是指定要获取的对象的类型,可以用于获取画刷句柄,字体,调色板的句柄。由于GetStockObject函数可以返回多种资源的句柄,在实际应用该函数前无法确定它返回哪一种资源的句柄,因此它的返回值的类型定义为HGDIOBJ,在实际使用时需要进行类型转换,例如我们要为hbrBackground成员指定一个黑色画刷的句柄,可以调用如下:

wndclass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);

2.透明画刷

3.透明画刷实现的几种方式

#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、付费专栏及课程。

余额充值