47.位图资源显示HBITMAP、BITMAP、LoadBitmap、GetObject、CreateCompatibleDC、SelectObject、BitBlt

先说说HBITMAP和BITMAP的区别,及两个结构
HBITMAP是一个句柄

DECLARE_HANDLE(HBITMAP);
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name

BITMAP是一个结构,用于存储位图的信息

/* Bitmap Header Definition */
typedef struct tagBITMAP
  {
    LONG        bmType; //类型,必须为0
    LONG        bmWidth; //位图宽度
    LONG        bmHeight; //位图高度
    LONG        bmWidthBytes; //每一行像素所在的byte数
    WORD        bmPlanes;//颜色平面数
    WORD        bmBitsPixel;//像素的位数
    LPVOID      bmBits;//位图内存指针
  } BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;

先说下位图资源显示的步骤
1.加载位图资源
HBITMAP hBitmap = LoadBitmap((HINSTANCE)hWnd,MAKEINTRESOURCE(IDB_BITMAP1));

/*
 * Resource Loading Routines
 */

WINUSERAPI
HBITMAP
WINAPI
LoadBitmapA(
    __in_opt HINSTANCE hInstance,
    __in LPCSTR lpBitmapName);
WINUSERAPI
HBITMAP
WINAPI
LoadBitmapW(
    __in_opt HINSTANCE hInstance,
    __in LPCWSTR lpBitmapName);
#ifdef UNICODE
#define LoadBitmap  LoadBitmapW
#else
#define LoadBitmap  LoadBitmapA
#endif // !UNICODE

2.获取位图信息
GetObject(hBitmap,sizeof(BITMAP),&bitmap);

WINGDIAPI int   WINAPI GetObjectA(__in HANDLE h, __in int c, __out_bcount_opt(c) LPVOID pv);
WINGDIAPI int   WINAPI GetObjectW(__in HANDLE h, __in int c, __out_bcount_opt(c) LPVOID pv);
#ifdef UNICODE
#define GetObject  GetObjectW
#else
#define GetObject  GetObjectA
#endif // !UNICODE

3.创建内存绘图设备环境上下文,创建与设备环境兼容的内存环境
HDC hdcMem = CreateCompatibleDC(hdc);

WINGDIAPI HDC     WINAPI 
CreateCompatibleDC( 
__in_opt HDC hdc //绘图设备上下文
);

4.把GDI位图对象选入内存设备环境
SelectObject 该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
SelectObject(hdcMem,hBitmap);

__gdi_entry WINGDIAPI HGDIOBJ WINAPI 
SelectObject(
__in HDC hdc
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值