2009-06-14 51 views
1

我想知道如何使一個窗口透明,而不是鏤空孔或總體相同的透明度。C++中的跨平臺透明窗口?

嗯,只是說我想拍一朵玫瑰的PNG圖像或者什麼東西,並將它與背後的東西很好地融合在一起,並允許後面的東西重繪,並通過圖片/窗口的透明部分進行變化。

我可以(或希望)使用類似的wxWidgets或OpenGL。但不是Qt或GTK。

回答

1

我發現,它實際上是非常簡單的使用扔在屏幕上的透明圖片WXW:

wxScreenDC dc; 

wxBitmap bmp(wxT("test.png"), wxBITMAP_TYPE_PNG); 
dc.DrawBitmap(bmp, 250, 100, true); 

現在我必須找出如何處理更新和這樣的,它必須是(也許部分重繪)當更新下面有東西時。

因爲它是現在它只是重繪自己ontop的本身,使其成爲一個同時充分opacue。

有wxScreenDC :: DrawBitmap的另一個版本,把窗口作爲參數,也許是一個解決這個?

0

參見wxTopLevelWindow::SetTransparent

如果平臺支持的話會設置窗口爲半透明。

所以我想的wxWidgets可以做到這一點。

+0

我知道這個函數,它將整個窗口設置爲相同的透明度。不是我的意思。 我想要一些像素完全透明,其他一些完全不透明,而其他許多像素在兩者之間。 像從網上隨機此照片(搜索「redrose.png」在谷歌): http://www.uniqueboutiquedallas.com/images/redrose.png 它的邊緣是透明的,使得它融合在一起,無論落後了。 看看http://www.rainlendar.net/cms/components/com_rny_gallery/simpleviewer/images/Skins-Win.png,你會發現窗戶在某些部分是透明的。 – Frank 2009-06-14 21:40:48

0

如果你願意做的比C++以外的東西,有可能是其他跨平臺的選項,如JavaFxAdobe AIR

+2

我個人(真的很多)都不喜歡他們。所以不,是簡單的答案。 – Frank 2009-06-14 21:42:33

+0

由於Adobe Air已經放棄了對多個平臺(包括我的主要平臺(Linux和Android))的支持,Adobe Air現在更少跨平臺。 – Frank 2013-10-09 17:21:00

1

如何使用成形框架?

wxBitmap m_bmp = wxBitmap(_T("redroseonwhite.png"), wxBITMAP_TYPE_PNG); 
SetSize(wxSize(m_bmp.GetWidth(), m_bmp.GetHeight())); 
wxRegion region(m_bmp, *wxWHITE); 
bool m_hasShape = SetShape(region); 

查找*的wxWidgets-2.9.0 \樣品\形*爲完整的例子。