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函数
首先,你需要自己继承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
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯