我想要一个带有桌面的win32程序,它就像碎玻璃一样,最后会把这些碎片重新组合在一起是否可以参考用C ++做这种效果?
答案 0 :(得分:5)
几年前,我写了一个程序(不幸的是现在丢失了)做这样的事情。
可以通过为屏幕创建DC,创建兼容的位图,然后使用BitBlt
将屏幕内容复制到位图来检索桌面图像。然后使用GetDIBits
以已知格式从此位图获取像素。
此链接并不完全如此,但它演示了原则,尽管使用的是MFC。我找不到特定于Win32的示例:
http://www.flounder.com/screencapture.htm
对于破碎效果,最好使用Direct3D或OpenGL。 (更多细节取决于您。)使用之前保存的位图数据创建纹理。
通过与OpenGL或D3D关联的窗口,创建一个无边框窗口,填充整个屏幕,不进行绘画或背景擦除。这样可以防止从桌面图像切换到用于绘制的桌面图像副本时出现任何闪烁。
(如果使用D3D,您还会发现GetMonitorInfo
与IDirect3D9::GetAdapterMonitor
和朋友一起使用,因为您需要为每个显示器创建一个单独的设备,因此您需要知道桌面的哪个部分对应于该设备。)