刮刮分层窗户需要帮助

时间:2011-03-22 00:40:13

标签: c# windows pinvoke layered

我正在尝试刮(拍摄一个屏幕截图)一个分层窗口,它似乎无法正常工作。有些layered windows工作正常,有些则没有。以下是我这样做的方式:

IntPtr display_dc = GetDC(IntPtr.Zero);
IntPtr bitmap_dc = CreateCompatibleDC(display_dc);
IntPtr bitmap = CreateCompatibleBitmap(display_dc, rect.Width, rect.Height);
IntPtr null_bitmap = SelectObject(bitmap_dc, bitmap);

IntPtr window_dc = GetWindowDC(Handle);
BitBlt(bitmap_dc, 0, 0, rect.Width, rect.Height, window_dc, 0, 0, 
    TernaryRasterOperations.SRCCOPY | TernaryRasterOperations.SRCPAINT);

ReleaseDC(Handle, window_dc);
SelectObject(bitmap_dc, null_bitmap);
DeleteDC(bitmap_dc);

using (Bitmap temp = Bitmap.FromHbitmap(bitmap))
{
     temp.Save(String.Format(@"C:\{0}_test.bmp", Handle.ToString("x")));
}

DeleteObject(bitmap);
ReleaseDC(IntPtr.Zero, display_dc);

问题在于,当通过UpdateLayeredWindow更新分层窗口时,我通过SetLayeredWindowAttributes获取正确的图像和黑色位图。有人可以告诉我,我们是否有办法通过UpdateLayeredWindow win api调用来更新分层窗口?

解决方法到目前为止,我已经对整个屏幕进行了屏幕截图,然后从中复制了窗口位图,问题是窗口应始终位于顶部,以便正常工作。

TIA

0 个答案:

没有答案