Hallo! Kann mir jemand sagen wie ich bei FindWindow() nur einen Teil eines Titels suche? Damit ich z.B. immer wenn die Funktion einen Teiltitel mit den Text "Editor" findet er mir ne MessageBox ausgibt und ich nicht immer einen kompletten Titel angeben muss. Ciao Robert
So kannst du es nicht machen. Dazu ist dann die Funktion FindWindow nicht geeignet. Eine Möglichkeit ist die Funktion EnumWindows(). Du kannst dort eine CALLBACK Funktionsadresse angeben. Diese Funkiton wird dann immer wieder aufgerufen und du erhältst dort dann die Namen samt Fensterhandles. Du kannst dann dort in dem angegebenen Titel nach deinem Teiltitel suchen.
Dazu kannst du die Funktion strstr() verwenden. Wenn du z.B. als Titel: "MeineDatei.txt - Editor" hast und du willst wissen ob da "Editor" drin steckt, dann schreib einfach:
Hi! Ich habe es nun endlich hin bekommen, dass es funktioniert! Jetzt habe ich aber das Problem, dass die EnumWindowsProc-Funktion eine statische Funktion ist und ich aber aus dieser heraus eine andere Funktion aufrufen will/muss. Wie bekomme ich das jetzt hin, damit ich eine nicht statische Funktion aufrufen kann? -- Ich habe es zwar geschafft die Funktionen aufzurufen (die nicht statischen), aber da gibt es dann Probleme, weil in diesen Funktionen UpdateData(FALSE); drin ist! MfG Robert
Das Problem kannst du so lösen, dass du der EnumWindows Funktion als lParam den this Zeiger der aufrufenden Funktion übergibst. Wenn du also die EnumWindowsProg in deiner View Klasse untergebracht hast, dann kannst du folgendes machen:
Aufruf:
C++:
EnumWindows(Funktionsname, (LPARAM)this);
und in der EnumWindowsProg:
C++:
CView* pView = (CView*)lParam; ...
pView->Memberfunktion(..);
wobei die Memberfunktion die Funktion ist, die UpdateData() aufruft.
So muss es funktionieren.
Gruß Christian -- Grüße, ChristianDieser Post wurde am 23.08.2002 um 22:57 Uhr von Christian editiert.
Hi! Da gibt es jetzt noch ein Problem, dass ich dieses (LPARAM)this schon benutze (mit einer Listbox) und ich rufe mehrere Funktionen aus der EnumWindowProc-Funktion auf (insgesamt 4). Wie kann ich 4 LPARAM's übergeben (also mit der EnumWindows()-Funktion)? MfG Robert
Wenn dir der eine Parameter nicht ausreicht, dann kannst du es ja so machen: Schreib dir einfach eine Struktur, in die du alle Daten packst und dann übergib nur die Adresse der Struktur. z.B.:
struct WindowStruct { int a; CWnd* pWnd; CDocument *pDoc; ... (einfach die Variablen die du brauchst) };
Jetzt kannst du in der Funktion, wo du EnumWindow(..) aufrufst, initialisieren und dann die Adresse der Struktur übergeben.