Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » CWnd und HWND

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
05.07.2005, 12:27 Uhr
kox



Nee, kann ich leider nicht, das ganze ist ja ne Java-Anwendung,
welche die C-Funktionen aufruft...
Ich hab jetzt ein bißchen rumprobiert, also der CWnd-Handle,
den ich habe, ist auf alle Fälle ok, ein rabiates DestroyWindow funktioniert
Eigentlich ist alles super, nur das OnKeyUp scheint nicht anzuspringen...

Kox
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
05.07.2005, 12:48 Uhr
kox




Zitat von kox:
Ok, also die letzte Frage habe ich mir glaube ich soeben selbst beantwortet, hab ne Schleife while (cwnd) {} gemacht, damit läßt sich das Fenster schließen...
Kox


Da hab ich wohl was falsches geschrieben, das geht jetzt irgendwie doch nicht...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
05.07.2005, 13:23 Uhr
Airdamn



Du solltest nicht nach cwnd prüfen, sondern nach dem Fensterhandle (cwnd.m_hWnd).
Oder die Methode GetSafeHwnd() benutzen...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
05.07.2005, 18:50 Uhr
Spacelord
Hoffnungsloser Fall


Du schreibst ja dass du das Fenster von Java aus erstellst,wie konkret sieht das denn aus?
Insbesondere frage ich mich ob du überhaupt ne Nachrichtenschleife hast die die Windowsnachrichten an dein CWnd Objekt weiterleitet?
Wenn du einfach nur aus dem Java Programm ne native Funktion aufrufst,die nen Window Objekt anlegt und nen Thread startet wird das wohl nichts.
Ich denke du wirst wohl die zweite Variante von AfxBeginThread nutzen müssen und ne Klasse von CWinThread ableiten.Dann solltest du dein Handle auch innerhalb des UI-Threads mit Attach an dein CMyWnd Objekt binden.
Sind aber alles nur Vermutungen.....

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
06.07.2005, 11:27 Uhr
kox




Zitat von Spacelord:
Du schreibst ja dass du das Fenster von Java aus erstellst,wie konkret sieht das denn aus?
Insbesondere frage ich mich ob du überhaupt ne Nachrichtenschleife hast die die Windowsnachrichten an dein CWnd Objekt weiterleitet?
Wenn du einfach nur aus dem Java Programm ne native Funktion aufrufst,die nen Window Objekt anlegt und nen Thread startet wird das wohl nichts.
Ich denke du wirst wohl die zweite Variante von AfxBeginThread nutzen müssen und ne Klasse von CWinThread ableiten.Dann solltest du dein Handle auch innerhalb des UI-Threads mit Attach an dein CMyWnd Objekt binden.
Sind aber alles nur Vermutungen.....

MfG Spacelord



Also das ist ein größeres Projekt, wie genau da nun das Fenster aufgemacht wird, kann ich dir nicht sagen.

Ich verstehe nicht so ganz, was du schreibst, also so stelle ich es mir vor:
Ich hole mir den Handle des Fensters, erstelle ein Objekt einer abgeleiteten Klasse von CWnd und attache den Handle an dieses Objekt. Und dann starte ich einen Thread, der erstmal nichts macht, außer das Objekt am Leben zu erhalten. Und wenn ne Taste gedrückt wird, wird die von mir überschriebene Memberfunktion OnKeyUp meines MyCwnd-Objektes gestartet, da das aktive Fenster die OnKeyUp-Methode auslöst, und die macht dann genau das , was ich will.

Was geht dabei jetzt nicht, sorry, daß ich nochmal nachfrage, aber ich habs so nicht verstanden.

Kox

PS: Das Fensterschließen klappt, ich habe while(cwnd->GetSafeHwnd())
und wenn das Fenster geschlossen wird, rufe ich eine Funktion auf, die das CWnd-Objekt findet und vom Fenster trennt. Damit wird der Thread angehalten.

Dieser Post wurde am 06.07.2005 um 11:30 Uhr von kox editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
07.07.2005, 13:07 Uhr
kox



Hallo nochmal,

hab jetzt ein paar Sachen geändert, das Attach wird jetzt innerhalb meines Threads ausgeführt und funktioniert auch, hab es mit MessageWindow getestet.
Aber OnKeyUp reagiert immer noch nicht
Noch irgendwelche Tipps?

Kox
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
07.07.2005, 13:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Über schreib mal die WindowProc in deiner Klasse und schau welche Nachricht (und ob überhaupt eine Nachricht) ankommt wenn du deine Tasten drückst. Nicht jede Taste kriegt das Fenster auf sein KeyDown/KeyUp
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
11.07.2005, 12:15 Uhr
kox



Hallo FloSoft,

ich hab das jetzt schon mit verschiedensten Möglichkeiten probiert, wie überschreibe ich das richtig? In der h-Datei habe ich jetzt:

virtual LRESULT WindowProc(UINT message,WPARAM wParam,LPARAM lParam);

und in der cpp-Datei:

LRESULT CALLBACK WindowProc(UINT message,WPARAM wParam,LPARAM lParam); {
//machwas
}


Aber der Compiler sagt:
error C2447: missing function header (old-style formal list?)

Was stimmt da nicht, bzw. wie deklariere ich das richtig?

Kox
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
11.07.2005, 12:28 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


der ; nach dem ) in der cpp-datei muss weg
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
11.07.2005, 12:54 Uhr
kox



Hm, das hätt ich wohl auch sehen können!

Ok, geht jetzt, und ich hab das erstmal so:


C++:
LRESULT CALLBACK MyCWnd::WindowProc(UINT message,WPARAM wParam,LPARAM lParam) {
    if (message == WM_KEYUP) {
        MessageBox(_T("keyup"),_T("Testmessagebox"),MB_ICONEXCLAMATION);
    }
    if (message == WM_KEYDOWN) {
        MessageBox(_T("keydown"),_T("Testmessagebox"),MB_ICONEXCLAMATION);
    }
    return 0;
}



gemacht, kommt natürlich keine Messagebox, aber müsste eine kommen, wenn eine Taste gedrückt wird, ist das so ok?

Kox
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: