Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Dialog aus Thread heraus anzeigen

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 <
000
21.07.2005, 11:58 Uhr
GuenniAtWork



Hi,

Ich hab mir nen Thread gebastelt, der zwei Daten (von Datum).
Wenn eins Größer als das andere ist soll ein Dialog angezeigt werden.

Der Dialog erscheind für ca. 0,0001s und verschwindet wieder.

Hier der Code

C++:
// Thread-Funktion
//*** Erinnerungsprüfung
UINT StartReminding(LPVOID pToDoStruct)
{
    CRemindDlg pRemindDlg;
    //*** Datum und Zeit aus Struct seperieren
    CString szDate = ((TODOSTRUCT*) pToDoStruct)->szRemindTime.Left(((TODOSTRUCT*) pToDoStruct)->szRemindTime.Find(", "));
    CString szTime = ((TODOSTRUCT*) pToDoStruct)->szRemindTime.Right(((TODOSTRUCT*) pToDoStruct)->szRemindTime.GetLength() - ((TODOSTRUCT*) pToDoStruct)->szRemindTime.ReverseFind(',') - 2);
    //*** Aktuelle Zeit mit Erinnerungs-Zeit vergleichen
    COleDateTime m_oleRemindTime = pRemindDlg.StringToDateTime(szDate, szTime);
    COleDateTime m_oleCurTime = COleDateTime::GetCurrentTime();
    while (((TODOSTRUCT*) pToDoStruct)->bRemind)
    {

        if (m_oleCurTime >= m_oleRemindTime)   //Die Prüfung muss ich noch überarbeiten :)
        {
            ((TODOSTRUCT*) pToDoStruct)->bRemind = FALSE;
            pRemindDlg.ShowDlg((TODOSTRUCT*) pToDoStruct);  //Dialog anzeigen
        }
        COleDateTime m_oleCurTime = COleDateTime::GetCurrentTime();
        Sleep(15000);
    }
    return 0;
}
// ShowDialog-Funktion
//*** Dialog anzeigen
void CRemindDlg::ShowDlg(const TODOSTRUCT* pToDoStruct)
{
    //*** Fenster erstellen
    Create(IDD_REMINDDLG);
    //*** Fenster anzeigen
    ShowWindow(SW_SHOW);  //mit DoModal() gibs n' ASSERT
    //*** Daten aus Struct übernehmen
    SetTitle(pToDoStruct->szRemindTime);
    SetDlgItemText(IDC_ST_REMINDEJOB, pToDoStruct->szJob);
}



Wär super wenn mir da jemand weiterhelfen könnte oder vieleicht ne andere Lösung hat.
--
Gruß GuenniAtWork
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.07.2005, 14:14 Uhr
GuenniAtWork



Goil, habs hinbekommen!!!

Dank Codeguru

Jetzt hab ich noch ein ploblem, wie bekomme ich Daten auf diesen Dialog aus meinem ListCtrl auf meinem Hauptfenster?

Mit SendMessage?????????????
--
Gruß GuenniAtWork

Dieser Post wurde am 21.07.2005 um 14:57 Uhr von GuenniAtWork editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.07.2005, 10:11 Uhr
GuenniAtWork



Hi.

Ich komm absolut nicht weiter, und das geht mir ziemlich auf die Eier!

Also nochmal mein Problem:

Ich hab eine SDI-Anwendung mit einem ListCtrl,in dem Termine stehen sollen.
Um den User an einen Bestimmten Termin zu erinnern soll ein weiterer Dialog angezeigt werden, in dem Die Erinnerungszeit im Tietel stehen soll und eine Kleine Beschreibung des Termins in einem Static-Element. Weiter soll der User auch die Moglichkeit haben auf dem Erinnerungsdialog die Zeit für eine erneute Erinnerung an diesen Termin anzugeben.

Um dies zu realisieren hatte ich vor für jeden Eintrag einen Thread aufzurufen, der Prüft ob die Zeit für die Erinnerung schon ran ist. Wenn sie es ist wollte ich einfach den Dialog anzeigen. Das hatte aber nicht geklapt. Desshalb hab ich mir bei Codeguru ne Klasse besorgt, die Dialoge in eigenen Threads anzeigt. Das hat auch ganz gut funktioniert, nur konnte ich den Datenaustausch zwischen Erinnerungsdialog und ListCtrl nicht realisieren.

Hat vieleicht jemand ne Idee wie man das Problem angehen kann?
--
Gruß GuenniAtWork
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
22.07.2005, 16:00 Uhr
mmc20
puss in boots


hi, muss es unbedingt ein thread sein ?
was macht den die anwendung (im hintergrund) wenn ein solcher termin angezeigt wird ?
falls sie nur wartet, kannste ja auch einen modalen dialog nehmen, und das ganze so realisieren:

C++:
CDeinReminderDlg dlg;
dlg.m_Time = m_RemindTime;
if ( dlg.DoModal() == IDOK ) {
    m_RemindTime = dlg.m_Time;
// hier dann nochwas mit der neuen zeit anstellen...
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
22.07.2005, 16:07 Uhr
mmc20
puss in boots


... ups, jetzt hab ich das nochmal alles richtig gelesen...
du willst für jeden termin einen eigenen thread laufenlassen ? warum ?
setz doch einfach einen timer der alle paar sekunden (oder weniger, kommt darauf an wie zeitkritisch diese termine sind) alle termine überprüft ob schon einer "reif" ist, dieser wird dann angezeigt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: