• 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

Object Storage Arubacloud
0 głosów
299 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 (194,920 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 (194,920 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 (194,920 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 263 wizyt
pytanie zadane 25 października 2017 w C i C++ przez wikiFord Początkujący (330 p.)

92,563 zapytań

141,416 odpowiedzi

319,596 komentarzy

61,948 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...