MSDN只笼统一句话告诉你HBITMAP是HANDLE类型.要了解内部细节,你还得自己看SDK文件.
查看你的WinDef.h文件
-------------------------------------------------------------------------------------------------
#ifdef STRICT
typedef void*HANDLE;
#define DECLARE_HANDLE(name) struct name##__{ int unused;}; typedef struct name##__*name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
---------------------------------------------------------------------------------------------------------
如果定义了STRICT,那么HBITMAP类型就等于 HBITMAP__{}结构, HBITMAP同时也是HBITMAP__类型的指针.
如果没有定义STRICT, HBITMAP= HANDLE类型, HANDLE= PVOID类型.PVOID= void*类型
所以HBITMAP就等于void*类型.
要查看HBITMAP是个结构还是void*类型很简单(定义了trict,就是结构类型,否则void*)
你用void* p= static_cast<void*>( HBITMAP句柄).如果可以转换,HBITMAP就是void*.不行的话说明是结构类型.你必须用reinterpret_cast<>来转换.当然用C转换也行.
上面的代码执行完后,HBITMAP hbmp应该指向这幅图
char s[1000];
memcpy(s, hbmp,?);
这样做主要是为把hbmp中的内容通过socket send给其他进程
------解决方案--------------------------------------------------------
hbmp只不过是位图句柄,并不是实际的数据,你要用CBitmap.GetBitmapBits()获得数据,何必要要用Char,用byte不是更好
------解决方案--------------------------------------------------------
不是把HBITMAP转换成char*,可以把图片压到dll里面,
hImageBMP= LoadBitmap(lib,MAKEINTRESOURCE(pic_ID));
pic_ID就是里面的ID号,可以通过直接传ID号也可以实现你的想法,
------解决方案--------------------------------------------------------
给你两个函数用于通过hbitmap获得bits,和大小
GetBitmapBits, GetObject
通过这两个函数你可以把你想要的数据存到一个buffer里,再用socket send给其他进程,之后将这个buffer还原成原始位图