怎么获取一个窗口背后的那块桌面背景

如何获取一个窗口背后的那块桌面背景?
我想获取主窗口背后的那块的桌面背景,应该怎么样得到呢?多谢牛人了
只有25分了啊啊啊啊


------解决方案--------------------
楼主是想使界面透明???得到窗口背后的那块的桌面背景 这个没实现过 期待大牛出现
------解决方案--------------------
获得desktop的DC,然后根据当前窗口的屏幕坐标bitblt应该可以吧?
------解决方案--------------------
得一下explore的窗口DC或许可以
------解决方案--------------------
显然不可能,因为只有桌面接收到WM_PAINT消息时才会去绘制,除非你先隐藏窗口,然后Bitblt,然后再显示窗口,Windows出于节省资源考虑,是不会去保存被遮盖的窗口的内容的。
------解决方案--------------------
支持六楼:
  
在窗口创立,但没有SHow()之前将背景存入窗口的变量CBitmap m_bitmap中

窗口类定义
CMyFram : public CFrame
{
public:
CRect m_rect;
CBitmap m_bitmap
.........
}
1)在窗口Create重载之后
CMyFram ::OnCreate()
{
Create(..,m_rect,..);
CDC *pDC = 获得desktop的DC;
m_bitmap <- GetBItmap(pDC,m_rect); //获得desktop的m_rect对应图
}

这样一来,m_bitmap自然就是背景图啦.

------解决方案--------------------
楼上的,用户改了桌面背景你咋办?
------解决方案--------------------
我先hide自身窗体,然后得到桌面hwnd,然后得到dc,然后Bitblt.然后显示自身窗体. 我写截屏器时就这样做的.
------解决方案--------------------
这个问题在WIN9X基本没解决方案,但是在之后的系统倒有可能,不过没来得及研究,是偶尔发现的,做的半透明窗口,用WINVNC远程的时候,发现不管透明度是多少,窗体完全透明了,但是鼠标按对位置,远程机器上的窗口是有反应的,这应该是VNC的BUG,但是却给LZ的需求带来希望,需要研究一下VNC是如何截图的。
------解决方案--------------------
问题不在于VNC是怎么截图的,而是如何绘制的,估计VNC可能是用驱动级的直接绘制,凌驾于GDI之上,所以它到底点了部分是不是自己,Explorer不知道。
------解决方案--------------------
抱歉,我忘记考虑一样东西了……
从Windows 2000后有了分层窗口,可以直接Bitblt桌面。只要把你自己的窗口设置成WS_EX_LAYERED,的Alpha值
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^WS_EX_LAYERED); 
SetLayeredWindowAttributes(this->m_hWnd, 0, 254, LWA_ALPHA); 
这样Bitblt就可以截取到后面的背景。但是这个在Vista之后不起作用了,估计要利用DWM的相关功能

------解决方案--------------------
仔细查了一下,找到这个:
http://blogold.chinaunix.net/u2/67530/showart_601835.html
可以先获得桌面DC,关联一个位图,然后送一个WM_PAINT就把桌面绘制到位图上去了……貌似是兼容性最好的方法了。不用管DWM……
------解决方案--------------------
这个帖子挺有价值的
推荐一下
------解决方案--------------------
探讨

我先hide自身窗体,然后得到桌面hwnd,然后得到dc,然后Bitblt.然后显示自身窗体. 我写截屏器时就这样做的.

------解决方案--------------------
探讨
这个问题在WIN9X基本没解决方案,但是在之后的系统倒有可能,不过没来得及研究,是偶尔发现的,做的半透明窗口,用WINVNC远程的时候,发现不管透明度是多少,窗体完全透明了,但是鼠标按对位置,远程机器上的窗口是有反应的,这应该是VNC的BUG,但是却给LZ的需求带来希望,需要研究一下VNC是如何截图的。

------解决方案--------------------
LZ可以试下这个解决方案,让Parent Window响应WM_PRINTCLIENT,Child window在Paint的时候向Parent window发送WM_PRINTCLIENT以获取该区域的Bitmap,然后作为背景Paint到Child Window
------解决方案--------------------
看错了,上面的方法是针对透明控件
------解决方案--------------------
先获取窗体区域,然后用PrintWindow API获取桌面的图,然后自己按照窗体区域裁剪一下就可以了
------解决方案--------------------
探讨