OnDraw

mstank

Mitglied
Hallo an alle!

Bitte, bitte helft mir

C++-Code:

void CDVBasisNotebookView::OnDraw(CDC* pDC)
{
CDVBasisNotebookDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten hinzufügen


//Konstanter Zeiger auf die Dokumentdaten holen...
const strData *pData = pDoc->GetData();
//...und Daten ausgeben
for(int iIndex=0; iIndex<pData->nNoOfData; iIndex++)
pDC->TextOut(0,0, pData->pnData[iIndex]);

Anstelle einer Ausgabe von Zahlen, die in einer Strutur geschrieben wurden, werden nur y's mit Strich drüber ausgegeben. Ich vermute, daß die Ausgabe mit TextOut nicht richtig ist.

Wer kann mir helfen.ggf. auch mit LinksNoch ne Frage: Warum verschwindet die Klasse CDoc, wenn ich mit den Klassenassistenten eine neue Methode einfüge (macht er aber nicht immer).

THX Markus
 
Was ist denn strData für ein Datentyp? Ich vermute, dass es sich um eine Verpackung für eine Reihe CStrings handelt, oder? Ansonsten würde der Code auch nicht kompilieren. Ich habe den Verdacht, dass die CStrings nicht richtig initialisiert sind.
 
Hi Kachelator!

strData ist eine Struktur mit den Inhalt nNoOfData (Anzahl der Zeichen) und *pnData (Inhalt). Diese Struktur ist in CMyDoc und zwar privat. Via GetData() soll ein Zeiger auf strData geholt werden.

Damit versuche ich zu lernen, wie Daten per Zeiger übergeben werden und, was für mich wichtiger ist, wie sie in CMyView::OnDraw(...) in einem Fenster ausgegeben werden.

Gruß :confused: Markus
 
Dieses lustige y mit Strich drauf ist in Hex ein schönes 0xcd. Du hast da irgendwo uninitialisierten Speicher angesprochen.

1) Prüfe mal, ob strData beim ersten OnDraw schon erzeugt worden ist.
2) Initialisiere die Member von deiner strData-Klasse im Constructor.

Der Compiler wird nichts niemals nicht automatisch auf 0 initialisieren. Niemals nicht davon ausgehen!
(Eigentlich müsste ich die nie's und niemals'se Fett markieren)
 
strData ist eine Struktur mit den Inhalt nNoOfData (Anzahl der Zeichen) und *pnData (Inhalt). Diese Struktur ist in CMyDoc und zwar privat. Via GetData() soll ein Zeiger auf strData geholt werden.
Äh, könntest du vielleicht einfach die Deklaration/Definition posten? Damit könnte ich nämlich was anfangen. ;-)
 
Hi Kachelator!


Hier ist die Def. der Struktur:

C++-Code:

//Struktur für die Aufnahme der Dokumentdaten
struct strData
{
short nNoOfData; //Anzahl der Daten
char *pnData; //Die Daten
};


Gruß Markus
 
Hm, da ist ganz schön der Wurm drin.

Eigentlich dürfte das garnicht kompilieren, weil TextOut in dieser Form nur ganze Zeichenketten erwartet, aber keine einzelnen Chars. Und die steckst du laut deinem Code da rein -- unnötigerweise, wie mir scheint.
Soll dein struct strData einen oder mehrere String enthalten? So, wie es jetzt ist, kannst du nur einen reintun.

Ansonsten hat Endurion recht: Was du da ausgibst ist sicherlich nicht korrekt initialisiert.

Um dir weiter helfen zu können, brauche ich mehr Infos, was du da genau vorhast.
 
Um Himmels Willen (kreischend die Hände in den Himmel-streck):

Mach da einen Constructor rein, einen Copy-Constructor und einen Assignment-operator!

Wenn du so ein Struct, wie es ist, in den Raum stellst, steht nNoOfData und pnData NICHT AUF 0. Nicht in Debug (da ist's 0xcdcdcdcd, bzw. das lustige Y), schon gar nicht in Release (da ist es irgendwas).
 

Neue Beiträge

Zurück