• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

wxWidgets - źle wyświetlające się ikonki

VPS Starter Arubacloud
0 głosów
487 wizyt
pytanie zadane 2 października 2022 w C i C++ przez Bilib Użytkownik (990 p.)

Witam!

Do swojego programu dodałem przyciski, które zawierają grafikę. Do tego celu wykorzystałem bibliotekę wxWidgets. Pożądany efekt powinien wyglądać tak:

A wygląda niestety tak:

Jak widać, tła grafik nie są przeźroczyste. W zanadrzu, taki pasek przycisków bardziej przypomina zestawienie klasycznych buttonów niż toolbar.

Bardzo podobny problem jest opisany pod tym linkiem: https://forums.wxwidgets.org/viewtopic.php?f=23&t=44550.

Z powyższego tematu wynika, że potrzebny jest plik o rozszerzeniu rc, w którym zawarta jest ścieżka do innego pliku wx.rc. Nie wiem co zrobić, aby taki plik został "zauważony" czy odpowiednio zaimplementowany. Nie wiem czy w ogóle taki plik jest potrzebny i czy powinienem zrobić coś innego.

Pierwszy obrazek pochodzi z Code::Blocks, przez który taki plik rc został stworzony automatycznie w procesie kompilacji. Drugi zaś pochodzi z Visual Studio Code, dla którego zawarte są tylko najpotrzebniejsze pliki - cpp i h z kodem oraz json, w którym określony jest sposób kompilacji programu i niezbędne ścieżki.

komentarz 3 października 2022 przez j23 Mędrzec (195,220 p.)

No ale załączyłeś plik <wx/msw/wx.rc>?

komentarz 3 października 2022 przez Bilib Użytkownik (990 p.)

To ma właśnie znajdować się w pliku rc podobno. Jak załączę to w cpp albo h, to wywala błędy. Jeśli stworzę plik rc, np. resource.rc w którym wpiszę #include <wx/msw/wx.rc>, i załączę "resource.rc" do cpp lub h, to są dokładnie te same błędy. Dlatego pytam w jaki inny sposób to zaimplementować lub czy można zupełnie inaczej ten problem rozwiązać.

komentarz 3 października 2022 przez j23 Mędrzec (195,220 p.)
A jakie dokładnie błędy Ci wywala?
komentarz 4 października 2022 przez Bilib Użytkownik (990 p.)
To zależy w którym miejscu wstawię ten include. Jeśli wstawię to za wszystkimi includami, to wywala mi taki błąd dla wx.rc: 'wxWindowMenu' does not name a type; did you mean 'wxWindowRef'? Jeśli wstawię gdzieś wyżej to jest wywala więcej błędów z różnych plików .h zaincludowanych poniżej.
komentarz 5 października 2022 przez j23 Mędrzec (195,220 p.)

Czyli jeśli dobrze rozumiem, problem występuje jedynie w przypadku projektu zrobionego w VSC, tak? Dodaj plik zasobów do listy plików do kompilacji, nie załączaj go przez #include.

1 odpowiedź

+1 głos
odpowiedź 3 października 2022 przez edwardkraweznik Dyskutant (9,930 p.)
edycja 3 października 2022 przez edwardkraweznik

problemem nie jest plik .rc

musisz użyć formatu z kanałem alpha (na przykład png)

poniżej masz przykład jak ja to robię:

    // start ikony

    wxImageList *imageList = new wxImageList(36, 36, true, 1);

    wxBitmap bitmap1(wxT("img/status.png"), wxBITMAP_TYPE_PNG);
    wxBitmap bitmap2(wxT("img/dtc.png"), wxBITMAP_TYPE_PNG);

    int status_png = imageList->Add(bitmap1);
    int dtc_png = imageList->Add(bitmap2);

    // END ikony

 

a tak przypisuję ikony dla notebooka

    wxNotebook *nb = new wxNotebook(panel, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBK_TOP);

    nb->AssignImageList(imageList);

    pnl_status = new PanelStatus(nb);
    //PanelMag *magazyn = new PanelMag(nb);
    nb->AddPage( pnl_status, wxT("Status"), false, status_png );


    PanelDtc *pnl_dtc = new PanelDtc(nb);
    nb->AddPage( pnl_dtc, wxT("DTC"), false, dtc_png );

 

Ważna uwaga:

Nie pamiętam do której wersji ale trzeba było dodawać uchwyt

https://proton-ce.sourceforge.net/rc/wxwidgets/docs/html/wx/wx_wximage.html

w wxwidgets 3.2.1 już nie trzeba

komentarz 4 października 2022 przez Bilib Użytkownik (990 p.)
Zastanowię się nad zamianą klas wxToolBar i wxToolBarToolBase na wxImageList i wxBitmap. Dziękuję za odpowiedź.
komentarz 5 października 2022 przez edwardkraweznik Dyskutant (9,930 p.)
źle zrozumiałeś...

toolbar to kontrolka, wizualny element aplikacji a wxImageList to taki kontener na obrazy, ikony, grafikę...

Ja ci podałem tylko przykład, twoim zadaniem jest zrozumieć o co w tym chodzi.

Dostałeś wędkę... ;)

Podobne pytania

+1 głos
2 odpowiedzi 280 wizyt
pytanie zadane 25 października 2017 w C i C++ przez wikiFord Początkujący (330 p.)

93,020 zapytań

141,985 odpowiedzi

321,284 komentarzy

62,366 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...