2015-10-20 102 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