VC++ Win32 API编程:如何从剪贴板获取图像并在窗口中显示?

4

使用SelectObject()在内存DC上选择位图。这让我感到困惑。我已经阅读了msdn,但仍然不知道如何填写SelectObject()的第二个参数。


如果您对此有进一步的问题,请创建一个新的问题,而不是更新此问题。例如:“我正在尝试使用SelectObject()将位图选择到内存DC中。即使阅读了MSDN,我仍然不理解SelectObject()的第二个参数的目的。我应该传递什么给SelectObject()?” - Greg Hewgill
1个回答

8
调用OpenClipbard()打开剪贴板,然后使用CF_BITMAP类型调用GetClipboardData()获取存储在剪贴板上的图像数据句柄。如果剪贴板中没有图像,则将返回NULL句柄。

接下来,在窗口的WM_PAINT处理程序中,使用BeginPaint()获取设备上下文以绘制窗口,并使用CreateCompatibleDC()创建一个内存设备上下文以进行位图绘制。使用SelectObject()在内存DC上选择位图,最后使用BitBlt()将位图从内存DC复制到窗口的DC上。别忘了清理 - 调用DeleteDC()删除内存DC,并调用EndPaint()结束绘制。

最后,在完成操作后调用CloseClipboard()。请注意,剪贴板拥有位图句柄,一旦调用了CloseClipboard(),位图将被销毁。因此,如果您想在关闭剪贴板后保留位图,则需要复制它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接