2011-01-23 49 views
2

即时通讯正在寻找一种获取小部件的方法,例如面板设备上下文(如果这是正确的话)。我想获取面板的所有子窗口小部件的位图,所以我可以在绘画直流中操作它以淡入淡出面板的动画。这是可能的,如果是这样的代码?我希望有这样的东西.. wx.Panel.GetDCMap() 这将返回一个位图,将被绘制到屏幕上,所以我可以淡化它。也需要获取小部件的位图,即使其隐藏。否则我可以使用widget.GetScreenRect()然后将其闪光到缓冲区..谢谢在wxpython中获取小部件dc

回答

2

很好的问题!我不认为这是可行的,但我想这和它做的:

def window_to_bitmap(window): 
    width, height = window.GetSize() 
    bitmap = wx.EmptyBitmap(width, height) 
    wdc = wx.WindowDC(window) 
    mdc = wx.MemoryDC(bitmap) 
    mdc.Blit(0, 0, width, height, wdc, 0, 0) 
    return bitmap 

不工作,如果窗口处于隐藏状态。

将窗口远离屏幕排序的工作,显示客户区域,但不显示窗口装饰。

通话SetTransparent(0)首先具有与移动窗口关闭屏幕类似的效果。

上面的测试上完成64位Windows 7

如果你只需要在客户端领域,你可以做的上述方法之一和调整功能仅创建与客户区位图,像这样:

def window_to_bitmap(window): 
    width, height = window.GetClientSize() 
    bitmap = wx.EmptyBitmap(width, height) 
    wdc = wx.ClientDC(window) 
    mdc = wx.MemoryDC(bitmap) 
    mdc.Blit(0, 0, width, height, wdc, 0, 0) 
    return bitmap 
+0

你.....是一个天才:)我知道memoryDC和paintDC和screendc等等,但没有听说过那个windowDC之前。极度有用谢谢你:)你一直是一个巨大的帮助,我忙着重新制作小部件只是为了得到dc大声笑 – james 2011-01-24 20:24:24

相关问题