wxWidgets: Transparent Window
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.
Začneme tedy posuvníkem, který může vypadat například nějak takto:
wxSlider* m_slider;
1 2 3 4 |
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:
1 2 3 |
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:
1 2 3 4 5 6 7 8 9 10 |
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