CString -> LPARAM
-
toxor schrieb:
Ich versende das an eine Callback Funktion, gibts den sonst irgendwie ne Möglichkeit das dorthin zu schicken ?
Und hast du diese Callback-Funktion innerhalb deines Programms eingerichtet - oder ist das ein eigenständiges Programm? (ich glaube, wir reden aneinander vorbei)
Ich hab keine Ahnung warum das überhaupt funktioniert da oben ( also das die Callback aufgerufen wird obwohl es keine Memberfunktion ist ) . Naja und da wollte ich halt die globale Variable CString Load übergeben ( als PARAM )
Warum sollte es nicht funktionieren? Die WinAPI wurde noch auf Grundlage von C geschrieben - und damals hat man seine Windows-Programme nur auf diese Weise geschrieben (und ohne überhaupt etwas von Klassen (im C++ Sinn) oder Memberfunktionen gehört zu haben). Die MFC ist letzlich eine Wrapper-Bibliothek, die nahezu alle WinAPI-Aufrufe hinter einer Klassenhierarchie versteckt.
-
Ah ok ,sry , ich versende das innerhalb eines Programms ( also in keinem Eigenständigen Programm), sollte doch eigentlich schon gehen oder ?
-
wie holst du dir dann den string? du musst dann im messagehandler den string zurückcasten:
CString text = reinterpret_cast<LPCTSTR> (lParam);
-
hmmm ich versteh nicht ganz
-
na du sendest die message ja an ein hwnd... und dort muss doch irgendwo ein handler sein, der die message verarbeitet? dort, wo du mit dem string was machen willst...
-
Eigentlich will ich den String in die Callback schicken damit dort was mit dem String gemacht wird.
Ich mach das hier nach diesem Bsp :
http://blog.voidnish.com/?p=113aber ich möchte halt anstatt das ein im Code vorgeschriebenes Verzeichnis, ein CString übergeben wo das Verzeichnis drin steht.
-
ach, jetzt versteh ich... sorry... ne dann brauchst du das nicht zurückcasten. du selbst machst also mit dem string nixmehr, wenn ich das jetz richtig verstehe..
-
jop genau, ich möchte halt das Startverzeichnis nicht statisch vergeben , sondern zur Laufzeit ändern. Und da will die Callback funktion ein LPARAM, aber irgendwie lässt sich das so nicht realisieren fürchte ich
-
Probiere mal folgendes:
int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData) { if(uMsg == BFFM_INITIALIZED) { SendMessage(hwnd, BFFM_SETSELECTION,TRUE,lpData); } return 0; } void CFTP2Dlg::OnBnClickedButton6() { ... CString strInitialDir(_T("C:\\Windows")); bi.lpfn = BrowseCallbackProc; bi.lParam = (LPARAM) (LPCTSTR) strInitialDir; ... }
-
JAAAA MAN Thats it Danke