一个关于窗口可视区域被挡的问题?

geforce20 2005-01-17 09:03:12
我的一个窗口A被另一个窗口B挡住了 ,我此时获取窗口A的DC,GetDC(hwnd1),然后将这个DC的内容复制到窗口B上去,BitBlt(),于是窗口B上出现的是窗口A以及 挡住窗口A的那个窗口的部分内容。
我想知道是否有方法可以获取窗口A的实际的DC,无论窗口是否被其他窗口挡住。

我现在掌握的知识是每个DC后台都会有个Bitmap,而这个Bitmap是不受窗口可视区域是否被挡的限制的,也就是这个Bitmap是保存这个DC的实际内容,而且当你对这个DC进行做画等操作后,就会直接影响到那个Bitmap的内容 。但是我找不到获取这个Bitmap句柄的函数。有没有人知道呢?希望高人回答一下?
如果还有其他更好的方法解决我上面提到的问题,也希望大家讨论一下?
...全文
71 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sinall 2005-01-19
  • 打赏
  • 举报
回复
从其他方面有没有满足你最初需求的办法?
比如把A置在最前面,隐藏B……
zengwujun 2005-01-18
  • 打赏
  • 举报
回复
mark
AIDI3 2005-01-17
  • 打赏
  • 举报
回复
这个BITMAP,好像没有办法得到
我前不久也一直研究这个问题, 结果没有达到我的目标.
不过, 如果只是仅仅想对窗口进行抓屏, 那么我是这么实现的.
(如果在WINDOWS XP中,你可以使用PRINTWINDOW函数直接实现)

1. 首先对目标进行子类化(可以使用远程注入DLL或者使用HOOK)
2. 在远程进程内 创建一个BITMAP 和 一个内存memDC, 并发送WM_PAINT(带上参数memDC)让窗口重画.
3. 有些控件重画的时候并不使用WM_PAINT带进来的memDC进去重画,它会直接调用GetDC, GetDCEx, GetWindowDC, BeginPaint之内的DC函数得到窗口的DC, 因此你必须重载这些API.


够你研究的了...........

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧