2009-06-14 12 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); 

今、私は多分(更新を処理して、そのような、それがなければならない方法を見つけるために持っています部分的に再描画されます)。

それはちょうどそれがしばらくで完全にopacueなっ作り、自身の岩下自体を再描画する今ある通り。

wxScreenDCの別のバージョンがありました::引数としてウィンドウを取っDrawBitmapは、多分それは1つが、これを解決することをですか?

0

wxTopLevelWindow::SetTransparentを参照してください。

プラットフォームがサポートする場合、ウィンドウは半透明に設定されます。

だから私は、wxWidgetsのは、それを行うことができますね。

+0

私はその機能について知っていましたが、ウィンドウ全体を同じ透明に設定しました。私が意味するものではありません。 私はいくつかのピクセルを完全に透明にしたい、いくつかのものは完全に不透明にし、他の多くのピクセルは中間にあるようにします。 Googleの「redrose.png」で検索されたこのウェブ画像と同じように: http://www.uniqueboutiquedallas.com/images/redrose.png そのエッジは透明で、何でもブレンドします遅れている。 http://www.rainlendar.net/cms/components/com_rny_gallery/simpleviewer/images/Skins-Win.pngを見て、あなたは窓がいくつかの部分に透明であり、どのように参照してください。 – Frank

0

C++以外の操作をしたい場合は、JavaFxAdobe AIRのようなクロスプラットフォームのオプションがあります。

+2

私は個人的に(本当に)両方とも嫌いです。だから、単純な答えです。 – Frank

+0

Adob​​e Airは、私の主要なプラットフォーム(LinuxとAndroid)を含め、いくつかのプラットフォームのサポートを中止したため、今日のプラットフォーム間のクロスプラットフォーム性はさらに低くなっています。 – Frank

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

Look * wxWidgets-2.9.0 \ samples \ shaped *がすべての例です。

+0

私はちょうど興味があります、エッジがギザギザにならないのですか?私は完全に自分自身をそれを行うにきたよう(エイリアス問題) 今私は、私は(X、どんな窓に、などのX-サーバー複合拡張)をサポートする各プラットフォーム上でそれを行う方法をチェックアウトし、感じます – Frank

関連する問題