Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

tachtach

ich hab wiedermal ein kleines Problem mit meinem MDI-Fenster in VS6.0.

Es muss doch möglich sein Werte von der CMainFrame (von CMDIFrameWnd abgeleitet) in die untergeordneten Fenster (von CFormView abgeleitet) zu übergeben ohne dabei globale Variablen verwenden zu müssen.

Bis jetzt habe ich das ganze mit globalen Variablen geregelt. Das problem an der sache ist dass ich Fehler beim includieren erzeuge, und das nicht gerade wenige :( (er kompilliert mir komischerweise trotzdem fertig).

Ein weitere problem mit den globalen Variablen (eigentlich das Hauptproblem) is dass er mir, wenn ich das Prog schließe folgenden Fehler bringt:

File: dbgheap.c

Line: 1017

Expression: _BLOCK_TYPE_IS_VAILD(pHead->nBlockUse)

(kommt nicht so gut wenn ich des drin lasse!!!)

Du kannst mit CWinApp::GetFirstDocTemplatePosition/GetNextDocTemplate durch alle Dokument-Templates der Anwendung gehen, dann mit CDocTemplate::GetFirstDocPosition/GetNextDoc durch alle Dokumente dieses Templates, und schließlich mit CDocument::GetFirstViewPosition/GetNextView durch alle Views dieses Dokuments gehen.

Du kommst also mit einer dreifach verschachtelten Schleife an alle Views. Wenn du nur ein Template hast, kannst du die äußerste weglassen.

Original geschrieben von jasso

File: dbgheap.c

Line: 1017

Expression: _BLOCK_TYPE_IS_VAILD(pHead->nBlockUse)

Das ist ein ernstes Problem, und liegt nicht allein daran, dass du globale Variablen verwendest. Vermutlich schreibst du irgendwo über Arraygrenzen hinweg. Such nach Arrays, die auf dem Heap/Freispeicher angelegt werden (mit new/malloc) und prüfe genau, ob du nicht über den allokierten Bereich hinaus schreibst.
  • Autor

:confused: Verwirrt!!!:confused:

irgendwie habe ich das Gefühl dass mir der Aufbau einer MDI-Anwendung nicht ganz so klar is wie ich bisher gedacht habe.

ok.

ich habe alle stufen durchlaufen

CWinApp::GetFirstDocTemplatePosition/GetNextDocTemplate

CDocTemplate::GetFirstDocPosition/GetNextDoc

CDocument::GetFirstViewPosition/GetNextView

und erhalte am ende einen CView*. allerdings kann ich diesen nicht in eine meiner von CFormView abgeleiteten klassen konvertieren (was ja meiner meinung nach notwendig ist um auf die Membervariablen zugriff zu haben).

Wiso geht das nicht? wo doch die klassenhirarchie es erlauben müsste:

CWnd --> CView --> CScrollView --> CFormView

Original geschrieben von Klotzkopp

Das ist ein ernstes Problem, und liegt nicht allein daran, dass du globale Variablen verwendest. Vermutlich schreibst du irgendwo über Arraygrenzen hinweg. Such nach Arrays, die auf dem Heap/Freispeicher angelegt werden (mit new/malloc) und prüfe genau, ob du nicht über den allokierten Bereich hinaus schreibst.

Ich verwende im gesamten programm nur einen Array mit fünf Bitmaps drin. Habe ihn mir zwar trotzdem angeschaut aber definitiv keinen Fehler entdeckt. das einzige was ich auf den Heap-Speicher erzeuge sind meine Exception-Klassen.

Original geschrieben von jasso

und erhalte am ende einen CView*. allerdings kann ich diesen nicht in eine meiner von CFormView abgeleiteten klassen konvertieren (was ja meiner meinung nach notwendig ist um auf die Membervariablen zugriff zu haben).

Wiso geht das nicht?

Wenn du nur eine Viewklasse hast, kannst du den Zeiger einfach mit static_cast umwandeln:

CDeineViewKlasse* p = static_cast<CDeineViewKlasse*>(pZeigerVonGetNextView);
Wenn du mehrere Viewklassen hast, musst du den Typ mit dynamic_cast ermitteln:

CDeineViewKlasse1* p = dynamic_cast<CDeineViewKlasse1*>(pZeigerVonGetNextView);
if(NULL != p) {
// es ist ein CDeineViewKlasse1...
p->MemberFunktion();
}
else {
// andere Viewklassen testen
}[/code]

Damit dynamic_cast funktioniert, musst du in den Projekteinstellungen RTTI aktivieren.

[b]Ich verwende im gesamten programm nur einen Array mit fünf Bitmaps drin. Habe ihn mir zwar trotzdem angeschaut aber definitiv keinen Fehler entdeckt. das einzige was ich auf den Heap-Speicher erzeuge sind meine Exception-Klassen. [/b]
Enthalten die irgendwelche Arrays?

Oder verwendest du selbstgeschriebene DLLs?

  • Autor

:uli die konvertierung schluckt er und kompilliert fertig.

jetzt hab ich allerdings das problem dass er mir bei CDocTemplate::GetFirstDocPosition keinen wert zurückgibt, obwohl ich doch eigentlich ein Document drin haben müsste (Es wird mir ja angezeigt!!!)


CDocTemplate *pTemp;

CDocument *pDoc;

CView *View;

CBenutzereinstellungen *benutzer;

POSITION pos;

if(pos = app->GetFirstDocTemplatePosition())

{

  pTemp = app->GetNextDocTemplate(pos);

  [COLOR=red][COLOR=blue]if[/COLOR](pos = pTemp->GetFirstDocPosition())[/COLOR]

  {

    pDoc = pTemp->GetNextDoc(pos);

    [COLOR=blue]if[/COLOR]((pos = pDoc->GetFirstViewPosition())

    {

      View = pDoc->GetNextView(pos);

      benutzer = [COLOR=blue]static_cast[/COLOR]<CBenutzereinstellungen*>(View);

      benutzer->m_BenutzerID = 1;

    }

  }

  pTemp->OpenDocumentFile(NULL);

}
die View-Klasse wurde auch in der Applikationsklasse sauber eingefügt:

CMultiDocTemplate* pNewDocTemplate = [COLOR=blue]new[/COLOR] CMultiDocTemplate(

  IDR_BENUTZEREINSTELLUNGEN_TMPL,

  RUNTIME_CLASS(CPETDoc),

  RUNTIME_CLASS(CChildFrame),

  RUNTIME_CLASS(CBenutzereinstellungen));

AddDocTemplate(pNewDocTemplate);

Wie kann es sein dass er mir trotzdem kein Dokument findet?

Original geschrieben von Klotzkopp

Trifft das vielleicht auf dich zu?

http://support.microsoft.com/suppor...s/q154/7/44.asp

Also die Fehlermeldung is die selbe. Werd ich mir auf jeden fall zu gemüt führen. DANKE

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.