mfc中怎么接收消息

mfc中怎么接收消息,第1张

用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函数

第一步:定义消息。开发Windows95应用程序时,Microsoft推荐用户自贺带定义消息至锋拍圆少是WM_USER+100,因为很多新控件也要使用WM_USER消息。

第二步:实现消息处理函数。该函数使用WPRAM和LPARAM参数银塌并返回LPESULT。

LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam)

{

// TODO: 处理用户自定义消息

...

return 0

}

第三步:在类头文件的AFX_MSG块中说明消息处理函数:

class CMainFrame:public CMDIFrameWnd

{

...

// 一般消息映射函数

protected:

// {{AFX_MSG(CMainFrame)

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct)

afx_msg void OnTimer(UINT nIDEvent)

afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

}

第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。

BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)

//{{AFX_MSG_MAP(CMainFrame)

ON_WM_CREATE()

ON_WM_TIMER()

ON_MESSAGE(WM_MY_MESSAGE, OnMyMessage)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

如果用户需要一个整个系统唯一的消息,可以调用SDK函数RegisterWindowMessage并使用ON_REGISTER_MESSAGE宏指令取代ON_MESSAGE宏指令,其余步骤同上。

1.消息发送方:发送消息

首先在A的头文件(*.h)中自定义这个消息:

1 #define WM_MyMessage WM_USER+100

或者: 

1 const UINT WM_MYMESSAGE = WM_USER + n

 需注意以下几点: 

所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数n来表示的, n一般至少大于100

该消息一般加在stdafx.h 或resource.h 或*.h中,一般都是全局变量头文件

A是向外发送消息的对象,因此在A的某个拆散方法(函数)里就会调用用来发消息的函数B::SendMessage()/B::PostMessage(),昌激因为是B接受消息。

回到顶部

2.消息接收方:接受消息

消息接收方对象接受一个消息,需有以下三部分:

在头文件(*.h)中有该消息的处理函数的原型;

在实现文件(*.cpp)中有接受消息映射的宏;

在实现文件(*.cpp)中有该消息的处理函数的具体实现。

2.1 头文件中加上自定义消息的处理函数原型

在DECLARE_MESSAGE_MAP()语句之前,加如下形式的函数原型:

1 afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)

对Win32来说,wParam, lParam是传递消息最常用的手段。

2.2 实现文件中加上接受消息映射的宏

在cpp文件里,BEGIN_MESSAGE_MAP语旅迅氏句之后,加如下形式的代码:

1 ON_MESSAGE(WM_MyMessage, OnMyMessage)

 也就是说WM_MyMessage消息对应OnMyMessage函数。注意,上面是不用分号结尾的。

2.3 在实现文件中给出消息处理函数的具体实现

1 LRESULT CBDlg::OnMyMessage( WPARAM wParam, LPARAM lParam )

2 {

3 //处理用户自定义消息

4 ......

5 return 0

6 }


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8247042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存