wxWidgets und DLL
-
Hallo,
Ich versuche ein Programm mit zusätzlichen Fenstern zu erweitern, welche mit wxWidgets erstellt und über eine DLL verwaltet werden. Es scheint auch irgendwie zu funktionieren, aber seltsamerweise kann man eine wxFrame nur schliessen, wenn man das EVT_CLOSE Event handelt, das ist sonst bei eigenständigen wxWidgets-Anwendungen nicht so. Ich frage mich deshalb ob da alles korrekt läuft.
Es würde mich freuen, wenn jemand der Ahnung von der Materie hat mal einen Blick auf den Code werfen könnte, ob mein Ansatz korrekt ist, oder ob da noch etwas bei der Initialisierung/Cleanup fehlt. Es ist leider ein Bisschen schwierig, Infos über das Aufrufen von wxWidgets-Fenstern aus einer DLL zu finden. Danke!Hier der Code der DLL:
#include <wx/wx.h> IMPLEMENT_APP_NO_MAIN(wxApp) class MyFrame: public wxFrame { wxPanel* m_panel; wxTextCtrl* m_text; public: MyFrame(): wxFrame(0, -1, _T("Frame")) { m_panel = new wxPanel(this, -1); m_text = new wxTextCtrl(m_panel, -1); } void SetText(const char* text) { m_text->SetValue(wxString(text, wxConvISO8859_1)); } void OnClose(wxCloseEvent& evt) { Show(false); } void OnPaint(wxPaintEvent& evt) { wxPaintDC dc(m_panel); wxSize sz = dc.GetSize(); dc.DrawEllipse(0, 0, sz.GetWidth(), sz.GetHeight()); } DECLARE_EVENT_TABLE() }; BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_CLOSE(MyFrame::OnClose) // EVT_PAINT(MyFrame::OnPaint) END_EVENT_TABLE() BOOL WINAPI DllMain( HANDLE hinstDLL, DWORD dwReason, LPVOID lpvReserved ) { switch(dwReason) { case DLL_PROCESS_ATTACH: { int argc = 0; char* argv[] = {""}; return wxEntryStart(argc, argv) ? TRUE : FALSE; } break; case DLL_PROCESS_DETACH: wxEntryCleanup(); return TRUE; break; default: return FALSE; break; } } #define DLL_EXPORT __declspec(dllexport) extern "C" { wxFrame DLL_EXPORT *CreateFrame() { return new MyFrame; } void DLL_EXPORT ShowFrame(wxFrame* f, int show) { f->Show(show); } void DLL_EXPORT SetText(MyFrame* f, char* msg) { f->SetText(msg); } void DLL_EXPORT DestroyFrame(wxFrame* f) { f->Destroy(); } } // extern "C"