2009-06-14 113 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 \样品\形*为完整的例子。