ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
695
695
EMPFEHLEN
-
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.
-
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
-
hi, danke erstmal für deine Antwort.
Ich hab das schon mit RegisterWindowMessage probiert, bin aber gescheitert.
Mein Versuch:
die OnReceive der Klasse MySocket:
StdAfx.h:PHP-Code:void CMySocket::OnReceive(int nErrorCode)
{
SendMessage(HWND_BROADCAST,WM_MY_MESSAGE,0,0);
}
View.h :PHP-Code:...
static UINT NEAR WM_MY_MESSAGE = RegisterWindowMessage("MY_MESSAGE");
...
View.cppPHP-Code:
//{{AFX_MSG(CTBView)
....
afx_msg LONG RefreshFromReceive(UINT wparam,LONG lparam);
//}}AFX_MSG
Es kommt kein Fehler, aber die Funktion "RefreshFromReceive" wird nicht aufgerufen.PHP-Code:BEGIN_MESSAGE_MAP(CTBView, CFormView)
//{{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;
}

MfgGeändert von colblake (17.02.05 um 21:34 Uhr)
Über so viele Sachen wächst Gras , man kann keiner Wiese mehr trauen.
-
wenn ne nachricht definieren, dann so:
#define WM_USER_HELP (WM_APP+100)
-
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.
-
Also ich wüsste jetzt nur, das man ab WM_USER eigene Nachrichen defeniren kann:
so wie :
Vielleicht hilft das ja ._.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
M.f.G. ErikDieses Schreiben wurde maschinell
erstellt und bedarf keiner Unterschrift
-
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:
in die Klasse schreiben, die die Nachricht empfangen sollCode :1
#define WM_MYMSG_MOVE WM_USER+11
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
-
Eigene System Messages werden nicht erkannt
Von Cappaja im Forum VisualStudio & MFCAntworten: 2Letzter Beitrag: 27.06.09, 19:03 -
Datei mit angabe des dateipfads an eigene ip adresse senden
Von callofduty im Forum VisualStudio & MFCAntworten: 0Letzter Beitrag: 28.12.08, 15:33 -
textarea: per POST Text eingeben und wieder senden => senden funktioniert nicht
Von acquire im Forum PHPAntworten: 2Letzter Beitrag: 02.05.08, 08:46 -
eigene referer senden ?
Von jer1cho im Forum HTML & XHTMLAntworten: 3Letzter Beitrag: 04.04.07, 05:12 -
ICQ-Skript um Messages zu senden
Von lazi im Forum PHPAntworten: 3Letzter Beitrag: 03.01.04, 19:37





Zitieren
Login






