wxDc pole rysowania wxwidgets

Odpowiedz Nowy wątek
2015-02-23 04:50
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)

Pozostało 580 znaków

2015-02-23 10:35
0

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

Pozostało 580 znaków

2015-02-25 15:04
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

Pozostało 580 znaków

2015-02-25 19:28
0

Chyba nie wiem o co Ci chodzi.

Pozostało 580 znaków

2015-02-25 19:49
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();
} 

??

edytowany 1x, ostatnio: eryczzek, 2015-02-25 22:38

Pozostało 580 znaków

2015-02-25 22:52
0

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

Pozostało 580 znaków

2015-02-25 23:36
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

edytowany 4x, ostatnio: eryczzek, 2015-02-26 09:27

Pozostało 580 znaków

2015-02-26 12:43

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.

Pozostało 580 znaków

2015-02-26 16:33
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 !!

edytowany 4x, ostatnio: eryczzek, 2015-02-26 17:04

Pozostało 580 znaków

2015-02-26 18:11
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ć.

Pozostało 580 znaków

2015-02-26 18:48
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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