Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

1

14.09.2004, 21:42

PostMessage, Handles

hi,

habe eine kleine frage zu postmessage und windows handles.
handles sind doch eigentlich nichts weiter als pointer. oder?
hatte jetzt ne klasse in welcher ich postmessage aufrufen wollte.
folgend varianten ging nicht:

C-/C++-Quelltext

1
2
// m_pMainWindow ist ein Zeiger auf meinen Dialog

PostMessage((HWND)m_pMainWnd, MESSAGE, 0, 0);


so gehts (logisch, muss ja auch):

C-/C++-Quelltext

1
m_pMainWnd->PostMessage(MESSAGE);


warum geht obiges nicht? muss ja an dem handle liegen. im übrigen ist der rücklgabewert bei der ersten variante 0, also fehler...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

14.09.2004, 22:23

Hum Handle sind eigendlich nur nummern und keine Pointer. Dass das 1. nicht ging hängt wohl davon ab, dass m_pMainWnd kein Handle ist sondern ein Zeiger der Klasse CWindows oder CWnd.(nit hauen wenn es nit stimmt ;) )

3

14.09.2004, 23:54

Zum ersten wäre es schön wenn du uns auch sagen würdest das du MFC nutzt oder die WinAPI. Aber aus deinem zweiten Beispiel läst sich erkennen das du MFC nutzt.

Daher m_pMainWnd ist eine Klasse und die kann ich nicht einfach nach HWND konvertieren. Die Klasse beinhaltet zwar diesen Handle, aber mehr auch nicht.


In Windows sind die Handles im Moment vom Typ void* also nur eine Adresse, und kein Nummernwert. Worauf die Adresse nun zeigt oder wie der Wert am ende Interpretiert wird ist allerdings offen.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

15.09.2004, 08:44

also bei mir sind folgende Typen structs:

HINSTANCE__
HWND__
HANDLE__
HGLRC__
HDC__
HBRUSH__

alles Structs

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

5

15.09.2004, 18:51

erstmal vielen dank.

@dragonmaster:
m_pMainWindow ist nicht die Klasse, sondern nur ein Zeiger vom typ CWnd*.
insofern müsste ich es doch einfach nach HWND konvertieren können....

sry, wegen mfc. dachte das sei nicht von belang.

6

15.09.2004, 22:21

Wenn m_pMainWindow ein Zeiger vom Typ CWnd* wäre hättest du ein ** (also CWnd**) ;) Der Zeiger ist vom Typ CWnd nicht CWnd*. Also eine Klasse und die kann man nicht einfach nach HWND Konvertieren.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

7

16.09.2004, 11:33

habe m_pmainWnd so deklariert:

C-/C++-Quelltext

1
CWnd* m_pMainWnd;


m_pMainWnd ist also ein zeiger auf ein CWnd Exemplar... also vom Typ CWnd*, oder :confused:

8

16.09.2004, 16:04

Der * Impliziert einen Zeiger und ein ** Impliziert einen Zeiger auf einen Zeiger, usw.

Wenn du also einen Zeiger hast, ist allen klar das der Typ mit einem * deklariert wurde.

CWnd ist der Typ. Und wenn du einen Zeiger auf den Typ hast, dann hast du ein *, also CWnd*. Damit ist der Zeiger nicht vom Typ CWnd* sondern vom Typ CWnd.

Ich hoffe das ist einigermaßen verständlich ;D
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Dave

Alter Hase

  • »Dave« ist der Autor dieses Themas

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

9

16.09.2004, 16:15

ok. *g* hast mich überzeugt.

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

10

20.09.2004, 13:29

@Dave: Wenn du unbedingt "PostMessage" mit dem HWND-Handle aufrufen willst, dann hol dir über

C-/C++-Quelltext

1
m_pMainWnd->m_hWnd
das Originalhandle, das die CWnd-Klasse kapselt.
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

Werbeanzeige