2017-09-09 1 views
0

Ich habe gerade angefangen, wxWidgets zu lernen, und ich versuche, eine Art Image Opener zu erstellen. Aber ich kann nicht verstehen, wie man ein Bild hinzufügt ... Ich habe einige Sachen über wxImage, wxBitMap, wxStaticBitmap gesehen, aber ich konnte keine von ihnen oder den Unterschied zwischen ihnen verstehen.Bild in wxWidgets hinzufügen

#include <wx/wx.h> 
#include <wx/filedlg.h> 
#include <wx/wfstream.h> 

class MyApp : public wxApp 
{ 
public: 
    virtual bool OnInit(); 
}; 

class MyFrame : public wxFrame 
{ 
public: 
    MyFrame (const wxString& event); 

    void OnOpen(wxCommandEvent& event); 
    void OnQuit(wxCommandEvent& event); 

private: 
    DECLARE_EVENT_TABLE(); 
}; 

DECLARE_APP(MyApp); 
IMPLEMENT_APP(MyApp); 

bool MyApp::OnInit() 
{ 
    MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App")); 
    frame->Show(true); 
    return true; 
} 

BEGIN_EVENT_TABLE(MyFrame, wxFrame) 
    EVT_MENU(wxID_OPEN, MyFrame::OnOpen) 
    EVT_MENU(wxID_EXIT, MyFrame::OnQuit) 
END_EVENT_TABLE() 

void MyFrame::OnOpen(wxCommandEvent& event) 
{ 
    wxFileDialog openFileDialog(this, ("Open JPEG file"), "", "", "JPEG files (*.jpg)|*jpg", wxFD_OPEN|wxFD_FILE_MUST_EXIST); 

    if(openFileDialog.ShowModal() == wxID_CANCEL) 
     return; 

    wxFileInputStream input_stream(openFileDialog.GetPath()); 

    if(!input_stream.IsOk()) 
    { 
     wxLogError("Cannot Open File '%s'.", openFileDialog.GetPath()); 
     return; 
    } 
} 

void MyFrame::OnQuit(wxCommandEvent& event) 
{ 
    Close(true); 
} 

MyFrame::MyFrame(const wxString& title) : wxFrame(NULL, wxID_ANY, title) 
{  
    wxMenuBar * menuBar = new wxMenuBar; 
    wxMenu * exitMenu = new wxMenu; 
    wxMenu * openMenu = new wxMenu; 

    exitMenu->Append(wxID_EXIT); 
    openMenu->Append(wxID_OPEN); 

    menuBar->Append(openMenu, "&Open"); 
    menuBar->Append(exitMenu, "&Exit"); 

    SetMenuBar(menuBar); 

    CreateStatusBar(2); 
    SetStatusText(wxT("Image Opener !")); 
} 

kann jemand ein Beispiel zum Hinzufügen eines Bildes auf wxwidgets zeigen? oder es zu meinem Code hinzufügen. danke für Hilfe!

+1

Blick auf den Proben bietet mit der Bibliothek. Überprüfen Sie insbesondere das Zeichnungsmuster und natürlich alle anderen. – Igor

+0

@Igor Geist, einen Link zu teilen? –

+0

Überprüfen Sie einfach die Antwort von Vadim. – Igor

Antwort

2

wxImage ist eine portable Darstellung eines Bildes, wxBitmap ist eine Plattform-spezifische, aber effizienter Äquivalent. Im Allgemeinen ist wxImage bequem für die Arbeit mit Bilddaten, aber es muss in wxBitmap konvertiert werden, um angezeigt zu werden.

Beide Klassen sind nur abstrakte Bilder, während wxStaticBitmap ein Steuerelement ist, das ein Bild zeigt, d.h. etwas, das Sie wirklich auf dem Bildschirm sehen können.

Das Beispiel image (unter Beispielverzeichnis Ihrer wxWidgets-Distribution) zeigt, wie Sie die verschiedenen Klassen verwenden und Bilder direkt zeichnen.

0

wxImage und wxBitmap sind fast gleich und die Konvertierung zwischen ihnen ist einfach. wxStaticBitmap wird verwendet, um eine wxBitmap.it anzuzeigen kann durch folgendes Beispiel durchgeführt werden (StaticBitmap1 ist Ihr wxStaticBitmap und btmp ist Ihr wxBitmap):

StaticBitmap1->SetBitmap(btmp);