Eine Funktion in einem anderen View aufrufen

Thopeto

Erfahrenes Mitglied
Hallo

ich möchte aus meinem SampleView eine Funktion aufrufen, die sich im CDebugView befindet.

wollte das so probieren, aber das klappt nicht:
C/C++ Code: CDebugView* pView = new CDebugView();
if(pView != NULL)
{
((CDebugView*)pView)->TuWas();
}


Code:
CDebugView* pView =  new CDebugView();
	if(pView != NULL)
	{
		((CDebugView*)pView)->TuWas();
	}




Das ganze spielt sich in eine MDI anwendung ab und der DebugView ist in einer Sizebar http://www.codeproject.com/docking/dockview.asp gebettet


gruß
Thorsten
 
Du bastelst dir ein neues Objekt und erwartest, dass der Zeiger darauf das andere beeinflusst?

An der Stelle, wo du den DebugView erzeugst, merke dir einen Pointer drauf. Mit dem kannst du später problemlos arbeiten.

Alternative: Wenn du an einen CView*-Pointer von dem DebugView rankommst, kannst du den auch brutal casten. Das würde ich aber nur tun, wenn du genau weisst, dass es der richtige View ist.
 
Zuletzt bearbeitet:
Endurion hat gesagt.:
An der Stelle, wo du den DebugView erzeugst, merke dir einen Pointer drauf. Mit dem kannst du später problemlos arbeiten.

kannst du mir das näher erläutern?!wäre echt nett von dir wen du mir das mal erklärt, wie du das meinst?!

Weil an diesem Problem hänge ich schon glatte 2 wochen...habs dann zwischen durch zur seite gelegt, aber ich will das endlich kapieren und schaffen. aber meine ganze C++Bücher geben nicht mehr her :mad: (mein hirn auch nicht mehr ;) )

gruß
Thorsten
 
Legst du den CDebugView selber an? Oder geht das über die Doc-Template?

Wenn du den selber anlegst, musst du ja irgendwo new CDebugView stehen haben. An der Stelle kannst du dir doch den Pointer abgreifen.
 
ich sitz echt momentan auf der leitung :rolleyes:

sorry, aber ich bin da leider kein profi :(

fangen wir mal so an, wie würdest du es machen?!

in TuWas() steht momentan das drin AfxMessageBox("huhu");

wen ich aber z.B. SetTimer(); einfüge, kommt ein fehler in der afxinI datei, das m_hWnd gleich NULL sei.

sow eit kam ich, die frage ist nur, wie kann ich das beheben?! In all meinem schlauen büchern ist der bisherige weg, so beschrieben worden, aber ich mach schon am anfang einen fehler, bloss weiß ich nicht wo.


gruß
Thorsten
 
Hast du in deinem Programm zwei Views, also den CSampleView und den CDebugView gleichzeitig offen?
Wenn nicht, dann klappt das schon mal nicht. Das SetTimer zum Bleistift klappt einfach deshalb nicht, weil der CDebugView (noch) kein HWND hat. Da muss der View schon tatsächlich existieren, nicht nur die Klasse dazu.

Man beachte:
In MFC sind die CWnd-Klassen (und alle abgeleiteten, also auch die CViews) Code-Klassen, die ein HWND klammern. Das beinhaltet aber auch, dass eine CWnd-Klasse existieren kann, OHNE dass das zugehörige HWND existiert. In dem Fall bekommst du dann natürlich auch immer die Assert in Afxinl.
 
genau das hab ich mir auch gedacht *hust hust*
(man will ja nicht so dumm dastehen)

ne spass bei seite. Der CSampleView ist in einem CMDIChildWnd eingebetten und er CDebugView in der CViewbar von codeprojekt.

das ganze sieht dann so aus: Guckst du

beide sind sichtbar
 

Neue Beiträge

Zurück