Кроссплатформенные прозрачные окна в C ++? - PullRequest
1 голос
/ 15 июня 2009

Мне интересно, как сделать окно прозрачным, а не вырезать отверстия или такую ​​же прозрачность в целом.

Хорошо, просто скажите, что я хочу шлепнуть PNG-изображение розы или чего-то еще, чтобы оно хорошо сочеталось с тем, что позади, и позволяло материалам перерисовываться, а их изменения просвечивали сквозь прозрачные части изображения / окна.

Я мог бы (или хотел бы) использовать что-то вроде wxWidgets или OpenGL. Но не Qt или GTK.

Ответы [ 4 ]

1 голос
/ 14 января 2010

Как насчет использования фасонных рам?

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 \ samples \ shape *.

1 голос
/ 15 июня 2009

Я обнаружил, что на самом деле довольно просто вывести прозрачную картинку на экран с помощью wxW:

wxScreenDC dc;

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

Теперь я должен выяснить, как обрабатывать обновления и тому подобное, это должно быть (возможно, частично перерисовано), когда что-то ниже обновлений.

Как сейчас, он просто перерисовывает себя поверх себя, через какое-то время он становится полностью непрозрачным.

Была еще одна версия wxScreenDC :: DrawBitmap, в которой в качестве аргумента использовалось окно, может быть, это решается?

0 голосов
/ 15 июня 2009

Если вы готовы сделать что-то кроме C ++, могут быть другие кроссплатформенные опции, такие как JavaFx и Adobe AIR .

0 голосов
/ 15 июня 2009

См. wxTopLevelWindow :: SetTransparent .

Если платформа поддерживает, окно будет прозрачным.

Так что, я думаю, wxWidgets может это сделать.

...