aus App einer MDI Anwendung einen Pointer auf das aktive Dokument holen
-
Hallo Leute,
ich muss aus der Application eine Methode des gerade aktiven Dokuments aufrufen.
Ich habs mit (meinViewObjekt*)GetActiveWindow() und (meinViewObjekt*)GetActiveView() versucht, um dann per GetDocument() heran zu kommen. Offenbar bekomm ich aber keinen Pointer auf den gewünschten View, denn das Progi stürzt dann ab, wenn ich eine Methode des View oder des Documents aufrufen will.
aus den ganzen Hilfen der MSDN werd ich leider nicht schlauer.
Was mach ich falsch?Bin für jeden Tipp dankbar.
-
hallo,
also zunächst mal:
du bist im WinAPI-Forum und redest von MFC
naja...aber hast du unter Umständen schon mal daran gedacht, dass
deine Zielanwendung möglicherweise mit reiner WinAPI programmiert wurde und du jetzt versuchst mit MFC daraufzuzugreifen?
das kann meiner Meinung nach gar nicht funktionieren.
Versuch lieber das Handle des Hauptfensters über FindWindow (oder was auch immer dir beliebt) zu bekommen.
Dann über FindWindowEx holst du dir das MDI-Client-Handle und an das schickst du dann per
SendMessage die Nachricht WM_MDIGETACTIVE.
das liefert dir das aktive MDI-Child,
was gleichzusetzen mit einem View aus MFC ist.dein Hauptproblem wird jetzt sein,
dass das nur ein Fensterhandle ist und kein CView (bzw. abgeleitete Klassen)
das heißt, dass dir keine Methoden oder Überhaupt Hilfestellungen aus der MFC zur Verfügung stellen.aber da ich ja nicht weiß, was du überhaupt mit diesem View machen willst, kann ich dir natürlich auch nicht sagen, wie du weiter vorgehen könntest.
-
Sorry, hab keine Ahnung, wo WinApi aufhört und MFC anfängt. Die Anwendung wurde komplett im Visual C++ entwickelt. Von mir. Das muss doch einfacher gehen, als über die Handles. Ich will einfach eine Methode, die ich ins Doc geschrieben habe, für das aktive Fenster, respektive Dokument, denn jedes Doc hat bei mir nur einen View, ausführen.
Mit:POSITION TemplatePos = GetFirstDocTemplatePosition (); if (TemplatePos != 0) { CDocTemplate * Template = GetNextDocTemplate (TemplatePos); POSITION DocPos = Template->GetFirstDocPosition (); while (DocPos != 0) { myDoc* doc = (myDoc*)Template->GetNextDoc(DocPos); .......kann ich mich auch durch alle geöffneten Dokumente wühlen. aber woher weiß ich, welches Aktiv ist, d.h. welcher View (und damit das zugehörige Doc) hat den Fokus?