Gtkmm-3.0和Cairomm,透明窗口无法正常工作

时间:2015-10-20 04:22:28

标签: c++ gtkmm

我已经在最后一小时努力完成这项工作。 思想es Dock是一个类,它的基础是Gtk :: Window,并且在发出signal_draw()时,给定的上下文应该由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;
}

是否足以使窗口透明?

1 个答案:

答案 0 :(得分:0)

您的绘制处理程序无法访问有关窗口上应该绘制的其他内容的信息,因此您的paint()调用会在上面绘制一个透明层,我猜默认情况下是黑色背景

幸运的是,有一种方法可以达到你想要的效果:Gtk::Widget::set_opacity()