004
10.09.2004, 18:09 Uhr
Spacelord
Hoffnungsloser Fall
|
Zitat von Tommix: |
Hallo,
C++: |
CWnd* pWnd->GetDlgItem(IDC_TEXTBOX); // im Dialog bzw. CWnd* pWnd = my_Dialog.GetDlgItem(IDC_TEXTBOX); // von ausserhalb
|
Der Zeiger kann dann auf das entsprechende Control gecastet werden.
- Tommix
|
Das ist falsch!! Wenn das Control nicht explizit selber per Create erzeugt wurde,oder mit SubclassDlgItem festgelegt wurde dass das Control seine Nachrichten selber bearbeitet,liefert GetDlgItem einen Zeiger auf ein temporäres CWnd Objekt.Genau genommen handelt es sich um ein Objekt der MFC-internen Klasse CTempWnd.Da kannst du casten bis der Arzt kommt,es ist und bleibt ein CWnd!! Wenn du jetzt schwörst dass du Code dieser Art schon 10000000 mal benutzt hast und es immer funktioniert hat dann liegt das daran dass der CWnd Zeiger intern mit einem Windowhandle assoziiert ist an das die entsprechende Nachricht gesendet wird. Da es sich bei dem "echten" Control,das hinter dem Handle steht,ja um diesen Typ handelt kann es geeignet auf die Nachricht reagieren. Wäre die Methode die du über den Zeiger Aufrust virtual würde die CWnd Variante aufgerufen,wenn es denn eine gibt . Ansonsten kackt das Programm ab.
MfG Spacelord -- .....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes. |