2015-10-20 103 views
0

我一直在嘗試最後一個小時才能完成這項工作。 Dock的思想是一個基類爲Gtk :: Window的類,並且在signal_draw()被命名時,給定的上下文應該被CairoMM繪製爲透明的。相反,我看到一個黑色的窗口。 這裏去代碼:Gtkmm-3.0和Cairomm,透明窗口不能正常工作

Dock::Dock() : Gtk::Window() 
{ 
    set_decorated(false); 
    set_default_size(200,200); 
    set_app_paintable(true); 
    signal_draw().connect(sigc::mem_fun(*this,&Dock::dibujar)); 

} 

bool Dock::dibujar(const Cairo::RefPtr<Cairo::Context>& contexto) 
{ 

    contexto->set_source_rgba(1.0,1.0,1.0,0.0); 
    contexto->set_operator(Cairo::OPERATOR_SOURCE); 
    contexto->paint(); 
    return false; 
} 

不是應該足以使窗口透明?

回答

0

您的繪圖處理程序無法訪問窗口上應繪製的內容的信息,因此您的paint()調用將繪製一個透明圖層,該圖層默認爲黑色背景。

幸運的是達到你想要什麼樣的方法:Gtk::Widget::set_opacity()

+0

但如果我用它在父控件這樣,子部件將不能夠有不同的(較大)透明度,對不對?有什麼辦法讓孩子的小部件具有不同的alpha級別? – Debianita

+0

你的意思是你只想擁有一個帶有正常小部件的窗口,但是你可以通過它看到桌面背景? – ptomato

+0

確實,這差不多就是它 – Debianita