Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
Wat bedoel je precies?
Lees eens de quickstart (zie link), en vul je topic aan met de nodige informatie.
Misschien heb je hier wel wat aan.
en hier ook.
https://fgheysels.github.io/
Verwijderd
Ik heb gewoon in mijn CDialog class een instantie van een CSocket, en probeer deze in de constructor van de CDialog aan te maken door pSocket.Create() uit te voeren. Maar deze functie loopt dus al direct spaak en returned een FALSE.
En dan de tweede vraag: moet ik persé een eigen class (CMySocket) aanmaken die afgeleid is van CSocket en waarin ik de functie OnReceive overload? Of kan ik gewoon een instantie van CSocket aanmaken en extern controleren of er berichten binnengekomen zijn (van bovenaf -> z'n parent) en dan deze berichten toevoegen op het scherm?
De meeste voorbeelden werken met tweezijdige referenties: de CDialog heeft een CSocket, en de CSocket heeft een pointer naar de CDialog. Hierdoor kan de CSocket zelf dingen toevoegen in de CDialog. Dit is alleen altijd nogal een gekunstel met #include's, omdat je op moet passen voor een wederzijdse include (waardoor de compiler oneindig gaat includen).
De oplossing die ik in m'n hoofd had was als volgt: de CSocket weet alleen dat er een CDialog boven hem zit (maar verder niks van extra functies), en stuurt vanuit de OnReceive een bericht middels SendMessage met de oproep: kijk ik heb een bericht voor je.
Maar ik kan dus niet testen of dit werkt, omdat ik de hele CSocket niet aan de praat krijg.
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
Verwijderd
Daarna kun je CSocket::Create(..) functie aanroepen.
Wat beteft de tweede vraag: geen idee, ik gebruik geen CSocket, maar SOCKET (on MFC, maar werkt wel in MFC prg's).
[ Voor 2% gewijzigd door Verwijderd op 03-04-2003 15:36 . Reden: laat die laatste opmerking over SOCKET maar zitten, ik hadje laatste post nog niet gelezen) ]
Vond het al zo vaag: het returnde een FALSE, maar GetLastError gaf wel een 0 terug...
SOCKET werkt inderdaad ook gewoon in MFC apps, maar ik wil gewoon kijken wat ik allemaal met CSocket kan
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| [CMySocket.h] #include <afxwin.h> #include <afxsock.h> #define SOCKET_RECEIVE 5000 class CMySocket : public CSocket { private: CWnd * m_pParent; public: CMySocket(CWnd * pParent); ~CMySocket(); protected: afx_msg void OnReceive(int nErrorCode); }; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| [CMySocket.cpp] #include "CMySocket.h" CMySocket::CMySocket(CWnd * pParent) { m_pParent = pParent; } CMySocket::~CMySocket() { } void CMySocket::OnReceive(int nErrorCode) { CSocket::OnReceive(nErrorCode); m_pParent->SendMessage(SOCKET_RECEIVE); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| [MainGui.h] #include <afxwin.h> #include <afxcmn.h> #include <afxsock.h> #include "CMySocket.h" class MainGui : public CDialog { private: CMySocket * m_pSocket; public: MainGui(); ~MainGui(); enum{IDD = IDD_MAINGUI}; protected: DECLARE_MESSAGE_MAP(); }; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| [MainGui.cpp] #include "MainGui.h" BEGIN_MESSAGE_MAP(MainGui, CDialog) ON_MESSAGE(SOCKET_RECEIVE, OnReceive) END_MESSAGE_MAP() MainGui::MainGui() : CDialog(MainGui::IDD, NULL) { AfxSocketInit(); m_pSocket = new CMySocket(this); m_pSocket->Create(); m_pSocket->Connect("127.0.0.1", 80); } void MainGui::OnReceive(WPARAM wParam, LPARAM lParam) { CString str; m_pSocket->Receive(str,10); AfxMessageBox(str); } |
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack
De CSocket zie ik als een onderliggend object van de CDialog.
Bij het aanmaken van de CMySocket geef ik een pointer naar de instantie van de CDialog mee (this).
Deze pointer gebruikt de CMySocket weer op zijn beurt om vanuit de OnReceive een SendMessage te doen naar zijn parent (de CDialog -> "hallo, ik heb een bericht in m'n buffer").
Deze message wordt (met behulp van de messagemap) doorgestuurd naar de functie die verantwoordelijk is voor binnenkomende berichten (de OnReceive van MainGui).
Hierdoor wordt een duidelijke structuur gewaarborgd waarbij de CDialog in de hiërarchie "boven" de CSocket blijft staan. Nu heb je dus geen moeilijkheden met wederzijdse includes e.d.
Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack