Nachricht von View ans Doc schicken..



  • Hallo zusammen,

    ich habe eine SDI Anwendung. Im Dokument sollen Rechnungen durchgeführt werden bis der Benutzer im Hauptfenster ein bestimmte Schaltfläche drückt.

    Ich hab also einen Buttom hergestellt und durch den Ereignishandler eine Funktion hergestellt:

    void CBildschirmView::OnStopSimulation()
    {
       AfxGetMainWnd()->PostMessage(WM_APP+1, 0,0) ;  
    }
    

    Wie kann ich nun im Dokument während der Rechnung diese Nachricht empfangen?

    BOOL bContinue = TRUE;
        MSG msg;
        while (bContinue)
        {
            TimeLoop();
    
            while( ::PeekMessage(&msg, NULL, 0,0, PM_NOREMOVE ) )
            {
    
                if( !AfxGetApp()->PumpMessage())
                {
                    ::PostQuitMessage(0);
                    return;
                }
            }
        }
    
    }
    

    so klappts aber nicht. Habe im Internet auch schon einige Sachen durchgeguckt komme aber nicht weiter..

    Vielen Dank..



  • Du kannst doch aus der View direkt mit GetDocument() auf dein Doc zugreifen.



  • mach bContinue als member deiner klasse und erstelle einen nachrichtenhandler für deine WM_APP+1 nachricht und im handler setzt du bContinue auf false und deine while sollte soch doch beenden. Das Peek- und Pumpmessage würde ich durch

    MSG msg;
    
    while( ::PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE ) )
      ::AfxGetThread()->PumpMessage();
    

    ersezen um das nachrichtensystem von windows weiter zu betreiben oder alles gleich in einen thread verschieben (also die berechnung)



  • CTecS schrieb:

    mach bContinue als member deiner klasse und erstelle einen nachrichtenhandler für deine WM_APP+1 nachricht und im handler setzt du bContinue auf false und deine while sollte soch doch beenden. Das Peek- und Pumpmessage würde ich durch

    MSG msg;
    
    while( ::PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE ) )
      ::AfxGetThread()->PumpMessage();
    

    ersezen um das nachrichtensystem von windows weiter zu betreiben oder alles gleich in einen thread verschieben (also die berechnung)

    Hi vielen Dank..hab es verstanden..aber weiss leider nicht wie ich einen nachrichtenhandler für WM_APP+1 einrichte?kannst du mir nen weiteren tip geben?



  • na entweder du machst es wie connan vorgeschlagen hat und setzt bContinue aus dem view heraus oder du machst das folgender massen.

    BEGIN_MESSAGE_MAP(CChildView,CWnd )
    	//{{AFX_MSG_MAP(CChildView)
    ....
    	//}}AFX_MSG_MAP
    	ON_MESSAGE(UM_MyMessage,MyMessage) 
    END_MESSAGE_MAP()
    
    LRESULT CChildView::MyMessage(WPARAM wParam,LPARAM lParam)
    {
        bContinue = FALSE;
        return 0;
    }
    

    WM_USER+1 kannste auch in der stdafx.h mit define nen gängigen namen definieren, so mach ich das immer, dann kann man schon am namen sehen was das für ne message is

    StdAfx.h

    #define UM_MyMessage			(WM_USER+1)//nim WM_USER+1 is besser als WM_APP
    


  • supppppeeeer.hat geklappt:-)für maschbauer wie mich sind diese kleinen Sachen schon große erfolge...vielen dank euch..



  • aber studiert hast du net viele jahre oder? *lol*

    na wie auch immer bist ja zum ziel gekommen


Anmelden zum Antworten