Daten in Funktion an Ansicht weiter leiten ?
-
Hallo Leute,
mal ne Frage,
wie kann ich z.b. eine Variable, die ich in einer Funktion gefüllt habe, an das Hauptfenster leiten, dass dieses in einem CListCtrl angezeigt wird ??
Die Funktion läuft bei mir innerhalb einem Theard.
Die Ansicht besteht bei mir aus einem Splitter und soll in dem Fenster erscheinen das ich von CFormView abgeleitet habe.
Dort soll dann die Variable innerhalb meines CListCtrl in erster Zeile angezeit werden.Gruß
andy_mann
-
Wenn aus nem eingene Thread kommt würd ich sagen du definierst dir ne Message-ID und machst ein AfxGetMainWnd()->SendMessage(WM_MY_MESSAGE...
-
Ich Danke Dir,
mmhhhh könnntest Du eventuell dies noch genauer beschreiben, eventuell ein kleines Beispiel geben ??
Vilene Dank
Gruß
andy_mann
-
Servus,
eine andere Möglichkeit die ich kenne ist auch noch das hier:
UINT CDeinDlg::DeinControlThread(LPVOID pParam) { //machste irgendwas ((CDeinDlg*)pParam)->m_ctrDeineListe.WasWEissIch.AddString(blabla); //Wenn du hier noch ne Funktion die in einer Klasse von CWinThread aufrufst //dann gibst in dieser Funktion einen Wert zurück oder baust dir bei //Notwendigkeit einen Struct CWinThreadKlasse *pKlasse = new CWinThreadKlasse(); ((CDeinDlg*)pParam)->m_DeinStru.DeinWert = pKlasse->DeineFunktionMitRückgabe(); } void CDeinDlg::ButtonKlick() { AfxBeginThread(DeinControlThread, this); }DeinControlThread ist static.
m_ctrDeineListe ist ne Membervar von deiner Liste in deiner Klasse CDeinDlg.Das geht auch......
*winke*
Hellsgore
-
Das ist saugefährlich auf MFC CWnd klassen von anderen Threads aus direkt methoden aufzurufen, in 99% przent aller fälle kracht das nähmlich wenns nicht richtig synchronisiert ist.
Zur message:
#define WM_MY_ADDTRING_MESSAGE WM_USER+1 ... // irgendwo im Thread char *str = .... AfxGetMainWnd()->SendMessage(WM_MY_ADDTRING_MESSAGE,(WPARAM)str); // in deiner Window Class BEGIN_MESSAGE_MAP... ... ON_MESSAGE( WM_MY_ADDTRING_MESSAGE, OnMyAddstringMessage ) ... END_MESSAGE_MAP() void CMyWindowClass::OnMyAddstringMessage(WPARAM wParam, LPARAM pParam) { char *myString = (char*)wParam; // mach was }
-
CMatt schrieb:
Das ist saugefährlich auf MFC CWnd klassen von anderen Threads aus direkt methoden aufzurufen, in 99% przent aller fälle kracht das nähmlich wenns nicht richtig synchronisiert ist.
Ehrlich??? Ist bei mir "bisher" noch nicht vorgekommen.... Gut zu wissen.

*winke*
Hellsgore
-
Vielen Dank für euer Bemühen,
dass muß ich mir jetzt erst mal genauer rein ziehen...
Bis dann.
Gruß
andy_mann
-
Hallo,
ich habe jetzt verucht den Vorschlag ein zu Bauen, Kompiler bringt 0 Fehler, und mein tool läuft auch.
Allerdings bekomme ich keine Nachrichten gesendet.
Ich rufe bei meinem Thread eine Funktion auf. In dieser Funktion habe ich diesen Source von Dir eingeführt:
char *str = "Hallo"; AfxGetMainWnd()->SendMessage(WM_MY_ADDTRING_MESSAGE,(WPARAM)str);Dann habe ich in dem Fenster wo die Nachricht erscheinen soll diese Funktion von Dir eingebracht:
void CTickerDialog::OnMyAddstringMessage(WPARAM wParam, LPARAM pParam) { char *myString = (char*)wParam; // mach was m_strTest = myString; AfxMessageBox(m_strTest.c_str()); }Ich habe dann den Debugger laufen lassen und gesehen, dass er garnicht in diese Funktion (void CTickerDialog::OnMyAddstringMessage) reinspringt.
Es erscheint auch noch:
AfxGetMainWnd zurückgegeben
und
CWnd::SendMessageA zurückgegeben , wert 0
kann aber damit nichts richtige anfangen...Was mache ich falsch ??
Gruß und Danke
andy_mann
-
naja, er sendet doch.
Allerdings, da ich ja meine SDI anwendung gesplittet habe funzt das nur wenn ich in der CMainFrame entgegen nehme.
Ist das eigentlich richtig ?
Wie komme ich jetzt von meine CMainFrame in mein Splitterfenster dort wird eine ANsicht generiert von CFormView abgeleitet ??Achso noch was, kann ich eigentlich auch mehrere Daten weiter geben ??
Ich habe nähmlich mehrere Daten aus einem Vector.
z.b. Name, Nachname, Straße. Nun sollen diese in der Gespliteten Ansicht erscheinen.Gruß
andy_mann
-
Hallo Leute,
kann mir keiner sagen, wie ich die messages in mein gesplittetes Fenster bekomme ??
Gruß
und Danke
andy_mann