tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
695
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von colblake
    colblake colblake ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    dresden
    Beiträge
    214
    Hi,
    Ich hab folgendes Problem:

    Ich hab eine SDI-Anwendung, die eine Internetverbindung aufbaut über eine eigene, von CAsyncSocket abgeleitete, Klasse.
    Nun hab ich in der eigenen Klasse die OnRecieve von CAsyncSocket überschrieben.


    Problem:
    Diese OnReceive soll nun eine Funktion in der View-Klasse aufrufen.

    Kann ich das mit Messages machen? Wenn ja, wäre ich über ein Stück Code mit Beschreibung sehr dankbar.

    Vereinfacht:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    class MySocket: public CAsyncsocket
    {
     
    void OnReceive (void);
    ...
    }
     
    class ApplDoc:public CDocument
    {
    public:
          MySocket sock;
    }


    Mfg Col.Blake
     
    Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.

  2. #2
    Shaijan Shaijan ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Beiträge
    57
    Hi ...

    Wenn ich mich nicht irre, kannst du eigene Messages du die z.B. global definierst mit
    #define MY_MESSAGE 123
    im eigenen Projekt ohne Probleme benutzen.

    Aber wenn du eigene Messages zwischen zwei eigenständigen Projekten (z.B. Dll->Dialog) benutzen willst musst du die registrieren mit RegisterWindowMessage.

    Die Messages fragst du einfach in der WndProc ab ... sollte funktionieren ...

    Gruß
    Shai
     

  3. #3
    Avatar von colblake
    colblake colblake ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    dresden
    Beiträge
    214
    hi, danke erstmal für deine Antwort.

    Ich hab das schon mit RegisterWindowMessage probiert, bin aber gescheitert.

    Mein Versuch:
    die OnReceive der Klasse MySocket:
    PHP-Code:
    void CMySocket::OnReceive(int nErrorCode)
    {    
        
    SendMessage(HWND_BROADCAST,WM_MY_MESSAGE,0,0);

    StdAfx.h:
    PHP-Code:
    ...
    static 
    UINT NEAR WM_MY_MESSAGE RegisterWindowMessage("MY_MESSAGE");
    ... 
    View.h :
    PHP-Code:

        
    //{{AFX_MSG(CTBView)
             
    ....
        
    afx_msg LONG RefreshFromReceive(UINT wparam,LONG lparam);
        
    //}}AFX_MSG 
    View.cpp
    PHP-Code:
    BEGIN_MESSAGE_MAP(CTBViewCFormView)
        
    //{{AFX_MSG_MAP(CTBView)
            
    ....
        
    ON_REGISTERED_MESSAGE(WM_MY_MESSAGE,RefreshFromReceive)
        
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    ...
    ...
    ...
    LONG CTBView::RefreshFromReceive(UINT wparam,LONG lparam)
    {
        
    AfxMessageBox("aaaaa recieved   ");
        return 
    0;

    Es kommt kein Fehler, aber die Funktion "RefreshFromReceive" wird nicht aufgerufen.
    Mfg
    Geändert von colblake (17.02.05 um 21:34 Uhr)
     
    Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.

  4. #4
    Thopeto Thopeto ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    227
    wenn ne nachricht definieren, dann so:

    #define WM_USER_HELP (WM_APP+100)
     

  5. #5
    Avatar von colblake
    colblake colblake ist offline Mitglied Gold
    Registriert seit
    Jan 2004
    Ort
    dresden
    Beiträge
    214
    hm,
    funktioniert auch net. kannst du mal bitte ein Beispiel geben?
    Danke
     
    Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.

  6. #6
    Registriert seit
    Apr 2004
    Ort
    Ettersburg (Thüringen)
    Beiträge
    176
    Also ich wüsste jetzt nur, das man ab WM_USER eigene Nachrichen defeniren kann:

    so wie :
    Code :
    1
    2
    3
    4
    
    #define SOCKET_HTTP_FILE_COMPLETE WM_USER +1
    #define SOCKET_HTTP_UPDATE WM_USER +2
    #define SOCKET_HTTP_ERROR WM_USER +3
    #define SOCKET_HTTP_EVENT WM_USER +4
    Vielleicht hilft das ja ._.

    M.f.G. Erik
     
    Dieses Schreiben wurde maschinell
    erstellt und bedarf keiner Unterschrift

  7. #7
    Avatar von fh_study
    fh_study fh_study ist offline Mitglied Gold
    Registriert seit
    Sep 2004
    Beiträge
    109
    Weiß nicht, ob dir das weiter hilft, aber ich schicke aus einem Thread selbst erstellte Nachrichten, was ohne Probleme funktioniert, dabei sind jedoch 4 Dinge zu beachten:

    1. Wie schon oben erwähnt:
    Code :
    1
    
    #define WM_MYMSG_MOVE                   WM_USER+11
    in die Klasse schreiben, die die Nachricht empfangen soll

    2. In die Klassen Declaration (Bereich protected) der empfangenden Klasse Funktion definieren
    Code :
    1
    2
    3
    
    afx_msg void OnMyMsgMove(CMyPlayer *);
    ...
    DECLARE_MESSAGE_MAP()

    3. In die Message Map der Klasse dann noch:
    Code :
    1
    
    ON_MESSAGE(WM_MYMSG_MOVE, OnMyMsgMove)

    4. ganz wichtig:
    Wenn diese Message durch eine Funktion einer anderen Klasse aufgerufen werden soll, brauchst du einen Zeiger auf die Klasse, die die Nachricht empfangen soll.
    Code :
    1
    
    pView->SendMessage(WM_MYMSG_MOVE, (UINT) this);
     

Ähnliche Themen

  1. Eigene System Messages werden nicht erkannt
    Von Cappaja im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 27.06.09, 19:03
  2. Datei mit angabe des dateipfads an eigene ip adresse senden
    Von callofduty im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 28.12.08, 15:33
  3. Antworten: 2
    Letzter Beitrag: 02.05.08, 08:46
  4. eigene referer senden ?
    Von jer1cho im Forum HTML & XHTML
    Antworten: 3
    Letzter Beitrag: 04.04.07, 05:12
  5. ICQ-Skript um Messages zu senden
    Von lazi im Forum PHP
    Antworten: 3
    Letzter Beitrag: 03.01.04, 19:37