我根本没有使用 Windows 编程的经验,但现在我有一个问题想在某个程序中解决。我需要将图像放置到 Windows 剪贴板,并且我有指向有效DIB
(与设备无关的位图)的原始指针(在我的实验中,dib 标头版本是 3)。该程序使用具有延迟剪贴板渲染的模型,这意味着首先我们使用SetClipboardData(CF_DIB, NULL)
然后在WM_RENDERFORMAT
消息程序中将实际数据放置到剪贴板中SetClipboardData(format, dibDataPointer)
。当我打开clipbrd.exe
(在 windows xp 上)并选择DIB
视图时,我可以毫无问题地看到图像。但在msdn
写入系统可以自动渲染从CF_DIB
格式CF_BITMAP
。我认为这就是为什么当我查看时会clipbrd.exe
看到 2 种格式:DIB
和BITMAP
. 当我选择clipbrd.exe
bitmap
我收到错误的格式。起初,当我查看代码时,我发现CF_BITMAP
系统消息处理函数中没有任何情况,因此当系统要求渲染时CF_BITMAP
,剪贴板中没有任何有效内容,所以我添加了如下内容:
switch(format){
case CF_DIB:
case CF_BITMAP: //new code
if(format == CF_BITMAP)//new cOde
format = CF_DIB;// new code
....
SetClipboardData(format, dibDataPointer);
....
并希望(实际上,我知道这行不通,但尝试了这种方式)系统将识别出我将作为数据的响应,CF_BITMAP
并且DIB
系统将自动转换。那么,如果我有数据,如何为来自系统的格式的WM_RENDERFORMAT
消息放置适当的数据(通常,如果我可以使用系统功能转换为而不是手动创建会更好)?CF_BITMAP
DIB
DIB
BITMAP
BITMAP
DIB