Witam
Męczę się z problemem przekazania wskaźnika na obiekt do aplikacji WxApp. Chodzi o to by we własnym main-ie można było ustawiać zawartość pola tekstowego.
Ma ktoś pomysł jak to zrobić?
Poniżej uproszczona wersja mojego kodu, kod składa się z 4 plików wxgui.h/cpp i main.h/cpp. Platforma to Linux
wxgui.h
#include <wx/wx.h>
#include <wx/image.h>
enum
{
ID_TEXT_LABEL = wxID_HIGHEST + 11,
ID_PANEL = wxID_HIGHEST + 120
};
class Okno: public wxFrame {
public:
Okno(wxWindow* parent, int id, const wxString& title, const wxPoint& pos=wxDefaultPosition, const wxSize& size=wxDefaultSize, long style=wxDEFAULT_FRAME_STYLE);
protected:
wxTextCtrl* text_label;
virtual void ustawText(int ID_ELEMENTU, std::string& tekst);
}
class WuXy: public wxApp {
public:
bool OnInit();
virtual void ustawText(int ID_ELEMENTU, std::string& tekst);
};
wxgui.cpp
#include "wxgui.h"
Okno::Okno(wxWindow* parent, int id, const wxString& title, const wxPoint& pos, const wxSize& size, long style): wxFrame(parent, id, title, pos, size, wxDEFAULT_FRAME_STYLE)
{
panel = new wxScrolledWindow(this, ID_PANEL, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
text_label = new wxTextCtrl(panelGlowny, ID_TEXT_LABEL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
set_properties();
do_layout();
}
void Okno::ustawText(int ID_ELEMENTU, std::string &tekst)
{
wxTextCtrl *pole_tekstowe;
wxString text_wx(tekst.c_str(), wxConvUTF8);
if (ID_ELEMENTU == ID_TEXT_LABEL)
pole_tekstowe = text_label;
pole_tekstowe -> AppendText(text_wx);
}
bool WuXy::OnInit()
{
wxInitAllImageHandlers();
Okno OknoWx = new Okno(NULL, wxID_ANY, wxEmptyString); // Zle miejsce na tworzenie obiektu
SetTopWindow(OknoWx);
std::string tekst="Labelek"; // Zle miejsce na tekst
OknoWx->ustawText(ID_TEXT_LABEL, tekst); // Zle miejsce na ustawianie
OknoWx->Show();
return true;
}
void WuXy::ustawText(int ID_ELEMENTU, std::string &tekst)
{
this->ustawText(ID_ELEMENTU, tekst);
}
IMPLEMENT_APP_NO_MAIN(WuXy) // Makro dla WuXow z informacja ze mam wlasnego main-a
main.h
#include "wxgui.h"
main.cpp
int main(int argc, char * argv[])
{
wxEntry(argc, argv); // Odpal WuXy
std::string tekst="TekstMain";
// Jak tutaj ustawic tekst?
// ??->ustawText(ID_TEXT_LABEL, tekst);
return 0;
}