Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Memeber-Variablen: Datenaustausch zwischen 2 CDialog-Klassen

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
19.10.2004, 10:29 Uhr
~Wahnsinnig
Gast


HI
Danke für die Antwort.
Ja ich habe im Header von CklasseDlg2 die Message Map eingetragen. mit
ON_WM_COPYDATA()


mein Hauptproblem, ist auch, das ich mit der Funktion


C++:
BOOL CklasseDlg2 ::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    CString strReceivedText = (LPCSTR)(pCopyDataStruct->lpData);
    return CMainDlgII::OnCopyData(pWnd, pCopyDataStruct);
}



nicht wirklich viel anfangen kann. Diese habe ich ja in den Dialog eingebaut, in dem ich die Message empfangen wíll.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
19.10.2004, 12:53 Uhr
Spacelord
Hoffnungsloser Fall


Hi,
im grossen und ganzen liest die Methode nur wieder die Nutzdaten die mit der Copydatastruct übergeben werden wieder aus.
Die WM_COPYDATA Nachricht muss in der MessageMap der .cpp sein.
Ich denke das ist dein Problem.
Die COPYDATASTRUCT aus dem Thread ist zwar eine Autovariable,so dass der Inhalt von pCopyDataStruct->lpData nach der Threadfunktion theoretisch nicht mehr gültig ist,allerdings verwendest du ja SendMessage und diese Funktion wartet bis die Nachricht verarbeitet wurde.Also sollte eigentlich eine tiefe Kopie des Strings angefertigt worden sein bevor COPYDATASTRUCT vom Stack geschmissen wird(genau genommen wird ja der komplette Stack des Threads freigegeben).
Falls es nicht funktioniert wenn du WM_COPYDATA in die MESSAGE_MAP der .cpp Datei deines Dialogs eingefügt hast,solltest du aber mal mit dem Debugger untersuchen was in pCopyDataStruct->lpData steht...

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
012
19.10.2004, 14:21 Uhr
~Wahnsinnig
Gast


HI Spacelord,

danke für deine Antwort, mein Problem ist Momentan noch banaler, ich bekomme gar kein Handle zum anderen WIndow in der sende Klasse hin.
Das mit dem FindWindow oder auch getdlgItem klappt nicht. Habe es auf andere weise versucht, aber klappt auch nicht. Habe etwas genutzt, über das ich normalerweise einen Zeiger auf mein Doc bekomme. Kannst du mir evtl. einen Tip geben, wie ich das für mein WND hinbekomme?
Danke


C++:
CWinApp* pApp = AfxGetApp();//pointer on whole Aplication
POSITION pos = pApp->GetFirstDocTemplatePosition();//go to positon first template in SDI just one
CDocTemplate* pTemplate = (CDocTemplate*)pApp->GetNextDocTemplate(pos);
POSITION pos1=pTemplate->GetFirstDocPosition( );
CDoc *pDoc=(CDoc *)pTemplate->GetNextDoc(pos1);




C++:
CString strWindowTitel = _T("Dialog");//Name des anderen Fensters
    CString strDataToSend = _T("Hallo");

    CWnd *pOtherWnd = CWnd::FindWindow(NULL, strWindowTitel );
    COPYDATASTRUCT cpd;
    cpd.dwData = 0;
    cpd.cbData = strDataToSend.GetLength();
    cpd.lpData = (void*)strDataToSend.GetBuffer(cpd.cbData);
    pOtherWnd->SendMessage(WM_COPYDATA, (WPARAM)AfxGetApp()->m_pMainWnd->GetSafeHwnd(), (LPARAM)&cpd);
    strDataToSend.ReleaseBuffer();
}

 
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: