2011-01-23 53 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

相關問題