getstockobject

本文详细介绍了GetStockObject函数的功能及使用方法。该函数用于检索预定义的备用笔、刷子、字体或调色板的句柄。文章列举了各种类型的对象参数及其用途,并提供了关于函数返回值和注意事项的说明。

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

  name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-5572165936844014&dt=1193665761703&lmt=1193665780&format=336x280_as&output=html&correlator=1193665761687&url=http%3A%2F%2Fwww.codeguru.cn%2Fpublic%2Fiframe%2Fwinapiiframe.htm&color_bg=FFFFFF&color_text=000000&color_link=000000&color_url=FFFFFF&color_border=FFFFFF&ad_type=text&ga_vid=1285758818.1193665762&ga_sid=1193665762&ga_hid=111695597&flash=9&u_h=768&u_w=1024&u_ah=740&u_aw=1024&u_cd=32&u_tz=480&u_his=8&u_java=true" frameborder="0" width="336" scrolling="no" height="280" allowtransparency="allowtransparency">     函数功能:该函数检索预定义的备用笔、刷子、字体或者调色板的句柄。

    函数原型:HGDIOBJ GetStockObject(int fnObject);

    参数:

    fnObject:指定对象的类型,该参数可取如下值之一;

    BLACK_BRUSH:黑色画笔;DKGRAY_BRUSH:暗灰色画笔;DC_BRUSH:在Windows98,Windows NT 5.0和以后版本中为纯颜色画笔,缺省色为白色,可以用SetDCBrushColor函数改变颜色,更多的信息参见以下的注释部分。GRAY_BRUSH:灰色画笔;HOLLOW_BRUSH:空画笔(相当于HOLLOW_BRUSH);

    LTGRAY_BRUSH:亮灰色画笔;NULL_BRUSH:空画笔(相当于HOLLOW_BRUSH);

    WHITE_BRUSH:白色画笔;BLACK_PEN:黑色钢笔;

    DC_PEN:在Windows98、Windows NT 5.0和以后版本中为纯色钢笔,缺省色为白色,使用SetDCPenColor函数可以改变色彩,更多的信息,参见下面的注释部分。

    WHITE_PEN:白色钢笔;ANSI_FIXED_FONT:在Windows中为固定间距(等宽)系统字体;

    ANSI_VAR_FONT:在Windows中为变间距(比例间距)系统字体;

    DEVICE_DEFAUCT_FONT:在WindowsNT中为设备相关字体;

    DEFAULT_GUI_FONT:用户界面对象缺省字体,如菜单和对话框;

    OEM_FIXED_FONT:原始设备制造商(OEM)相关固定间距(等宽)字体;

    SYSTEM_FONT:系统字体,在缺省情况下,系统使用系统字体绘制菜单,对话框控制和文本;

    SYSTEM_FIXED_FONT:固定间距(等宽)系统字体,该对象仅提供给兼容16位Windows版本;

    DEFAULT_PALETTE:缺省调色板,该调色板由系统调色板中的静态色彩组成。

    返回值:如果成功,返回值标识声请的逻辑对象,如果失败,返回值为NULL。

    WindowsNT:若想获得更多错误信息,请调用GetLastError函数。

    注释:仅在CS_HREDRAW和CS_UREDRAW风格的窗口中使用DKGRAY_BRUSH、GRAY_BRUSH和LTGRAY_BRUSH对象。

    如果在其他风格的窗口中使灰色画笔,可能导致在窗口移动或改变大小之后出现画笔模式错位现象,原始储存画笔不能被调整。

    HOLLOW_BRUSH和NULL_BRUSH储存对象相等。

    由DEFAULT_GUI_FONT储存对象使用的字体将改变。当想使用菜单、对话框和其他用户界面对象使用的字体时请使用此储存对象。

    不必要通过调用DeleteObject函数来删除储存对象。

    Windows 98、Windows NT 5.0和以后版本:DC_BRUSH和DC_PEN都能与其他储存对象如BLACK_BRUSH和BLACK_PEN相互交换关于检索当前钢笔和画笔颜色的信息,请参见GetDCBrushColor和GetDCPencolor,带DC BRUSH或DC PEN参数的Getstockobject函数可以与SetDCPenColor和SetDCBrushColor函数相互交换使用。

    Windows CE:Windows CE不支持fnObject参数的如下值:

    ANSI_FIXED_FONT、ANSI_VAR_FONT、OEM_FIXED_FONT、SYSTEM_FIXED_FONT

    Windows CE1.0版本不支持fnObject的DEFAULT_PALETTE值。

    速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:wingdi.h;头文件:gdi32.lib。

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

余额充值