wxWidgets 根本就没有实现过透明wxPanel容器,你设置wxTRANSPARENT_WINDOW,结果sorry 黑色,哈哈哈哈, 就是和你作对.想想当下那么漂亮的桌面, 背景, 透明, 特效.哎 悲哀啊,实现不了,就那死板的界面特性.
网上找了好久,也是乱七八糟,改底层代码还是算了吧,升级特要命.都是只言片语,断章取义的东西,摸鱼了好久好久,终于在官网找到个伯克利大学的一个项目实现了想要的效果,可是源码居然run不动,一堆乱七八糟的依赖,哎,真tmd操蛋啊,看看扔了好久,可那个效果真的能改善界面观赏度啊,真不错,心不甘情不愿的范代码,垃圾堆里面翻找,真要吐了,反反复复搞了好几次,理解,测试,干,心力疲惫的终于搞出来了.
void BGPabel::draw(wxDC& dc) {
if (bgimage.IsOk()) {
wxRect rect = GetRect();
wxImage img = bgimage.GetSubImage(wxRect(this->GetPosition().x, this->GetPosition().y, rect.GetWidth(), rect.GetHeight()));
//img= ImagePaletteHandler(img);
dc.SetPen(*wxBLACK_PEN);
dc.SetBackgroundMode(wxSOLID);
dc.SetBrush(*wxTRANSPARENT_BRUSH);
int s = img.GetWidth() * img.GetHeight();
// 创建透明层
// Setup the alpha channel.
unsigned char* alphaData = new unsigned char[s];
memset(alphaData, wxIMAGE_ALPHA_TRANSPARENT, s);
for (int y = 0; y < s; y++) {
alphaData[y] += 50;
}
img.SetAlpha(alphaData);
dc.DrawBitmap(wxBitmap(img), 0, 0, true);
dc.DrawRectangle(0, 0, img.GetWidth(), img.GetHeight());
}
}
不错核心代码就这几句, 裁切wxFrame背景图片为wxPanel背景并且设置透明度, 效果马上就是其他语言实现的界面,还带透明效果.哈哈哈哈.