http://www.zaachi.com/cs/items/wxwidgets-transparent-window.html

wxWidgets: Transparent Window

Publikováno: 04.12.2008 16:33:11

Velmi jednoduchá ukázka vytvoření průhledného okna pomocí knihovny wxWidgets.

V tomto jednoduchém příkladu si vytvoříme Dialog-based aplikaci, která bude obsahovat pouze jeden posuvník (Slider), pomocí nějž bude možné měnit hladinu transparentnosti daného okna.

wxwidgets slider

Začneme tedy posuvníkem, který může vypadat například nějak takto: wxSlider* m_slider;

m_slider = new wxSlider( this, wxID_TRANSPARENT, 10, 0, 10, 
                        wxDefaultPosition, 
                        wxDefaultSize, wxSL_AUTOTICKS| wxSL_BOTH| 
                        wxSL_HORIZONTAL| wxSL_LABELS| wxSL_SELRANGE| wxSL_TOP );

Slider má rozmezí od 0 do 10, přičemž defaultně je nastavena hodnota 10, která representuje netransparentní okno.

Aplikace obsahuje pouze tento jediný posuvník, který bude ovlivňovat transparentnost celého okna. Pro nastavení události musíme provázat Slider s obslužnou funkcí. V tomto případě jsem zvolil provázání pomocí Ebeny Table:

BEGIN_EVENT_TABLE(AlphaDialog, wxDialog)
EVT_SLIDER(wxID_TRANSPARENT, AlphaDialog::OnTransparent)
END_EVENT_TABLE();

Slider je provázán s funkcí OnTransparent ve třídě AlphaDialog, která bude hladinu transparentnosti nastavovat.

Hladina transparentnosti se nastaví voláním obslužné metody SetTransparent, která má jediný vstupní parametr, a to právě míru transparentnosti v rozmezí 0-255, kde 0 je maximální transparentnost:

void AlphaDialog::OnTransparent( wxCommandEvent &event ){
    //zjistíme zda můžeme transparentnosti používat. 
    if( AlphaDialog::CanSetTransparent() == true ){
        //zjistíme hodnotu ze Slideru
        int value = m_slider->GetValue();

        //minimalni hodnta je 75
        this->SetTransparent( value * 18 + 75 );
    }
}

Abychom zamezili tomu, že by okno úplně zmizlo, nastavíme minimální hodnotu na 75, a hodnotu transparentnosti ze Slideru k této hodnotě přičítáme.

Závěrem

Jedná se opravdu o velmi jednoduchou ukázku použití wxWidgets knihovny. Bohužel příklad a nastavení transparentnosti nebude fungovat v operačním systému Linux.
Celý projekt v Code::Blocks si můžete stáhnout zde: Alpha.zip