000
06.07.2004, 12:09 Uhr
~Bokon Taylay
Gast
|
Hallo!
Hab' vor ein paar Tagen eine Message gepostet in der ich ein Problem mit der Erstellung eines Windows in einer Funktion beschrieben habe. Ich habe dabei leider ein paar Fehler beim Pasten (ja, traurig aber wahr!!) gemacht, was das Ganze natürlich schwer verständlich genacht hat. Außerdem habe ich inzwischen ein paar schlechte Programmteile verbessert.
OK, nochmal zum (neuen/alten) Problem:
In einer DLL, die von einer Applikation, auf deren Source Code ich keinen Zugriff habe, geladen wird, muss ich innerhalb einer Funktion ein neues Fenster generieren, dass Daten anzeigt.
C++: |
void ShowData(BYTE sDataBuffer[], int iLength, UINT sStaAd)
{ CDataWnd dataWnd; if (dataWnd.CreateNewWnd(sDataBuffer, iLength) ) { // Print Message, do stuff } }
|
Die Klassen sind wie folgt definiert;
C++: |
CDataWnd::CDataWnd() { itsLength = 0; itsBuffer = NULL; }
/* Destructor */
CDataWnd::~CDataWnd() { }
/* Window Creation */
int CDataWnd::CreateNewWnd(BYTE * buffer, int length) { int quit; itsLength = length; itsBuffer = buffer; quit = Create(NULL, "Data", WS_VISIBLE|WS_OVERLAPPEDWINDOW, CRect(0,0,500,500)); if (!quit) { return (1); }
UpdateWindow(); return(0); }
/* OnCreate Function */
int CDataWnd::OnCreate(LPCREATESTRUCT lpcs) { if (CWnd::OnCreate(lpcs) == -1) return (-1); return (0); }
/* OnPaint Function */
void CDataWnd::OnPaint() { ... CString sDataline; CRect rect; GetClientRect(&rect); // Fill the String with data dc.DrawText(sDataline, &rect ,DT_LEFT ); ... }
|
Ok, so weit so gut. Wenn ich dann das Programm starte, wird das Fenster kurz angezeigt und verschwindet wieder. na ja, das ist ja, weil die Funktion ShowData() wieder zurückkehrt und das (lokale) Fenster die Gültigkeit verliert. Wenn ich das ganze mit new mache, bleibt das Fenster stehen, aber nach der Rückkehr hab' ich eine Access Violation (wenn ich wie beschrieben z.B. mit dem Cursor drauffahre)
Was ich nun gerne machen würde ist, dass das Fenster gezeigt wird, bis es vom User geschlossen wird oder dass es auch noch nach der Rückkehr der Funktion ShowData() gültig bleibt und keine Violations verursacht.
Bei Dialogen gibt's dafür ja eine DoModal() Funktion, kann man die auch für durch Create erzeugte Fenster verwenden bzw. gibt's was Ähnliches.
Danke für eure Hilfe schon mal im voraus!
BT |