我想获取主窗口背后的那块的桌面背景,应该怎么样得到呢?多谢牛人了
只有25分了啊啊啊啊
只有25分了啊啊啊啊
解决方案 »
- checkbox 禁止选择问题
- 学习事件机制,怎么入手?
- 连续2个字节 怎么知道他是不是中文
- 递归调用,STACK OVERFLOW,修改VC #pragma comment(linker,"/STACK:10240,2048")无效
- 有没有图形表示的窗口的各种尺寸啊,就是在GetSystemMetrics关于窗口参数的确切含义?
- 应届毕业大学生在沈阳好找VC方面的工作吗?
- 伸展位图
- 一个常见调试问题,高手指点迷津!
- 请教,请教!Rasapi32.dll开发的新建网络拨号问题。(求帮忙,高分)
- 有关CreateFile的问题
- VC使用AlphaBlend实现位图淡出遇到一个小问题
- C#或者MFC,如何获取桌面背景图(不包括桌面任何元素)
在窗口创立,但没有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自然就是背景图啦.
从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……
PaintDesktop(),直接用就可以了.
好用.
或是调用PrintWindow函数(其实其内部也是发WM_Print消息)。
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
PaintDesktop(hdc);
//该PaintDesktop API可以无视当前桌面上的其他窗体的累加,直接将桌面最原始的背景拷贝到你的HDC上,曾经一直被这问题困扰很久,呵呵,不过这个函数只能拷贝背景,拷贝不了其他的东西的,比如:WINDOWS桌面有很多图标什么的,这些是拷贝不进去的。 EndPaint(hWnd, &ps);
break;
}
我的是WIN7 XP应该也一样
int Proc()
{
HWND hWnd = FindWindow(TEXT("Progman"),TEXT("Program Manager"));
HDC hDc = GetDC(hWnd);
BitBlt(hMyDC,0,0,300,300,hDc,50,50,SRCCOPY );
return 0;
}
全都最大化也可以截取到屏幕