wxDc pole rysowania wxwidgets

0

Witam, chce za pomoca wxDC rysowac wykres audio. Przepraszam, że skaczę tak z jednej rzeczy na drugą i z powrotem, ale nie mogę zbyt dużo czasu poświęcić jednej rzeczy, bo jak mi nie wychodzi to mnie mega zniechęca.

Tutaj mam przykład z wxDC https://wiki.wxwidgets.org/Drawing_on_a_panel_with_a_DC
Jeśli chce zmienic ten kod to sie program wysypuje, nie moge go uruchomić jesli np nic nie wpisze(z wxDC) do bool MyApp::OnInit() - czy musze wskazac miejsce juz na poczatku gdzie bedzie rysowane podczas nagrywania ?

A jeśli chce okreslic miejsce, to w wxsmith mam dodac panel(na ktorym nic wiecej nie jest dodane) i dodac wxbozsizer ( czy przy wxdc dodaje sie to 'recznie' (kodem)

0

Wrzuć panel na okno, dodaj mu obsługę EVT_PAINT i tam rysuj wykres.

0

hmm mam pytanko, jak zaincjowac miejsce rysowania na stworzonym panelu ?
https://wiki.wxwidgets.org/Drawing_on_a_panel_with_a_DC
w tym przykładzie tworzy nowe okienko, zmienilem tak ze dodaje nowy panel ale mi wszystko przesuwa, a jak zrobić tak, żeby ten panel który stworzyłem był miejsce w ktorym bede rysowal

0

Chyba nie wiem o co Ci chodzi.

0

po prostu jak to nastawic zeby rysowalo na tym wxPanel ktory mam dodany, wydaje sie banalne ale cos mi nie wychodzi ;<

czy wystarczy

Panel(wxPaintEvent& event)
{
     wxClientDC dc(this);
     dc.funkcje();
} 

??

0

W obsłudze EVT_PAINT musisz użyć klasy wxPaintDC.

0

nic mi nie rysuje, dodatkowo nie mogę zamknąć projektu normalnie

Panel(wxPaintEvent& event)
{
     wxPaintDC *MyDC;
    MyDC = new wxPaintDC(this);
    MyDC->SetPen(*wxBLACK);
    MyDC->DrawLine(5,5,5,5);
 //delete (MyDC);
} 

a nawet

Panel(wxPaintEvent& event)
{
wxPaintDC dc(this);
dc.DrawText(wxT("Testing"), 40, 60); 
}

w obu przypadkach po skompilowaniu nic nie widze i wylaczyc aplikacje moge tylko za pomoca menadzera zadan

Zmienilem this na nazwe panelu. Cos rysuje. Ale wszystkie buttony na poczatku sa na bialo (moze kwestia odswiezania?) No ale nie moge normalnie wylaczyc programu;/
dodatkowo jak zminimalizuje to jak klikam pozniej na aplikacje, to wyswietal sie bez zadnego buttona, przyciski pojawiaja się dopiero gdy klikne na menubar, ale i tak zadna nie reaguje

i generalnie dziwna sprawa
bo w wxsmith wyglada tak 7f6383082b.png w konstruktorze ma takie dane
wxDLG_UNIT(Panel1,wxSize(730,144))
a po skompilowaniu ten panel jest na wieksza szerkosc od lewej do prawej prawie przylegajacy (na wxSmith duzo mu brakuje)
no i ten kwadracik dalem mu szerokosc 730 ( tyle ile teoretycznie powinien miec ten panel... a konczy sie zdecydowanie wczesniej ..
aa5b96e134.png

1

Jeśli obsługa rysowania jest w innej klasie niż klasa panela, wtedy zamiast this powinieneś dać:

wxPaintDC dc( (wxWindow*)event.GetEventObject() );

GetEventObject zwraca wskaźnik na obiekt, który wygenerował zdarzenie, czyli w tym przypadku klasa pochodna od wxPanel.

Co do reszty problemów nie jestem w stanie Ci nic powiedzieć, bo nie znam wxSmith i nie wiem jak wygląda kod, który generuje.

0

oo dzięki ,teraz uruchamia się normalnie, ;)) i mozna juz zamknac program, przyciski tez sa.
tylko nie widze rysunku, to przez brak odswiezania?
dodałem

void aaaaFrame::Panel(wxMouseEvent& event)
{
    this->Refresh();
}

ale to nic nie dało

dziala testing sie wyswietla !!!

  wxPaintDC dc( (wxWindow*)event.GetEventObject() );
    dc.SetPen(*wxBLACK_PEN);
   dc.SetBrush(*wxRED_BRUSH);
    wxCoord w = 200, h = 200;
    int x = wxMax(0, 100);
    int y = wxMax(0, 100);
    wxRect rectToDraw(x, y, w, h);
    if (IsExposed(rectToDraw))
    dc.DrawRectangle(rectToDraw);

ten kod nie wyswietla mi czerwonego kwadrata, ale reszta działa, dzięki wielkie !!

1

Wywal ten warunek i zobacz, czy działa. Jeśli tekst się wyświetla, to i inne funkcje rysujące też powinny działać.

0

bez warunku śmiga ;) dzięki :))

1 użytkowników online, w tym zalogowanych: 0, gości: 1