永发信息网

mfc中怎么接收消息

答案:5  悬赏:0  手机版
解决时间 2021-01-26 06:27
  • 提问者网友:萌卜娃娃
  • 2021-01-25 14:13
我做远程聊天,用MFC,CS模式,我想知道是那个函数把服务器过来的结构体接收的?
最佳答案
  • 五星知识达人网友:执傲
  • 2021-01-25 14:39
用CSocket类或者CAsyncSocket类;其实CSocket是CAsyncSocket的派生类,用起来都一样;
首先,你需要自己继承CSoscket类或者CAsyncSocket类,定义出一个CServer类和一个CClient类;然后再你的主程序(主线程)中,建立服务端和客户端的实例,并进行相应的初始化;

服务端主要需要制定监听端口,然后服务端还需要调用listen这个函数使端口进入监听状态;然后你的CServer类中需要实现OnAccept这个函数,它负责检测有没有客户端接入;实现OnReceive,它负责通知你有数据需要接受;实现OnClose,它负责通知你,某个客户端断开了连接;

客户端主要需要调用connect函数向指定的服务器进行连接;然后你的CClient类中需要实现OnConnect函数,它负责告诉你与服务端连接已建立;实现OnReceive,它负责通知你有数据需要接收;实现OnClose,它负责通知你,某个服务端断开你的连接;

接下来,在前面我提到的OnAccept函数中,你需要调用Accept进行客户端接入操作;在OnReceive函数中应该调用Receive函数接收数据;OnConnect和OnClose是一个通知,这个根据你的需要自己添加功能;发送数据调用send函数
全部回答
  • 1楼网友:玩家
  • 2021-01-25 18:23
tWindowLong并传入GWL_WNDPROC参数来设置你新的消息处理函数地址,对于你不处理的消息用 CallWindowProc并传入旧的消息消息处理函数来处理它 你可以这样实现,在DLL里写一个函数,例如是叫HOOK吧,它有一个参数HWND;HOOK函数里面调用SetWindowLong并传入GWL_WNDPROC就可以设置指定的HWND的消息处理函数地址(SetWindowLong的返回值是旧的消息处理函数地址);剩下的就看你的消息处理函数怎么写了;对于你不需要处理的消息,都用 CallWindowProc(OldMsgProc,.....)来处理好了 =============== 不懂再PM或HI留言
  • 2楼网友:摆渡翁
  • 2021-01-25 16:50
你先创建一个C++类,继承自CSocket,比如叫CmySocket; 然后添加一个成员变量,指向你程序的主窗体的指针。初始化为NULL;比如叫pParent; 然后重载这个类的OnReceive()函数,写下面的代码 unsigned char buff[1024]; int n = Receive(buff, 1024); pParent->DoSth(buff); 这样就行了,这个DoSth函数要在主程序中自己写,就是处理接收到的信息内容的。比如显示到某个空间啊,之类的。 然后再你的主程序中,包含这个新建的类的头文件,并且创建一个CmySocket的成员变量,在初始化的时候写上下面这样: .h: CmySocket mySock; .cpp: mySock.pParent = this; 当服务器发过来消息的时候,会自动调用这个函数
  • 3楼网友:笑迎怀羞
  • 2021-01-25 15:48
你可以在DLL里再写一个消息处理函数,然后用SetWindowLong并传入GWL_WNDPROC参数来设置你新的消息处理函数地址,对于你不处理的消息用 CallWindowProc并传入旧的消息消息处理函数来处理它 你可以这样实现,在DLL里写一个函数,例如是叫HOOK吧,它有一个参数HWND;HOOK函数里面调用SetWindowLong并传入GWL_WNDPROC就可以设置指定的HWND的消息处理函数地址(SetWindowLong的返回值是旧的消息处理函数地址);剩下的就看你的消息处理函数怎么写了;对于你不需要处理的消息,都用 CallWindowProc(OldMsgProc,.....)来处理好了 =============== 不懂再PM或HI留言
  • 4楼网友:一叶十三刺
  • 2021-01-25 15:22
1 可以在dll中加入一个初始化函数,将接收消息窗口句柄传给dll保存,dll就可以sendmessae给接收窗口 2 在dll中自己创建一个隐藏的窗口来接收消息 3 做成ocx可能更好用 补充: 1如果是mfc扩展dll 则可将串口定义为一个独立的导出类,在类的构造函数中指定一个窗口指针或窗口句柄的参数,在应用窗口构造串口类时将自己的指针或句柄传给dll类,由类私有成员来保存,当dll收到串口消息后可通过sendmessage将接收的消息发给窗口;如果是一般的dll则可以单独做一个初始化函数以窗口指针或窗口句柄作为参数,在dll内部申请一个全局变量保存就行了. 如 class comm { public: comm(cwnd* lpwnd){assert(null!=lpwnd); pwnd=lpwnd; //将窗口指针保存起来 } private: cwnd* pwnd; } 有问题qq 178752468
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯