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;
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.
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