请教一下vc中用户自定义消息是什么意思
呃,我有一点不明白的是,当窗口发生什么事的时候就会调用某个用户自定义消息处理函数呢....比如说,定义两个用户自定义函数,怎么区别是调用哪一个呢......
[code]
#define WM_SERVER_ACCEPT (WM_USER+101)
#define WM_SOCKET_READ (WM_USER+102)
//////////
ON_MESSAGE(WM_SERVER_ACCEPT, OnServerAccept)
ON_MESSAGE(WM_SOCKET_READ, OnServerreadorclose)
/////////
afx_msg LRESULT OnServerAccept(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnServerreadorclose(WPARAM wParam, LPARAM lParam);
[/code]
只这样就定义了一个用户自定义函数,什么时候就调用处理函数了呢......
[code]
LRESULT OnServerreadorclose(WPARAM wParam, LPARAM lParam)
{
if (WSAGETSELECTEVENT(lParam) == FD_READ)
//////
}
LRESULT OnServerAccept(WPARAM wParam, LPARAM lParam)
{
if (WSAGETSELECTEVENT(lParam) == FD_ACCEPT)
//////
}
[/code]
是不是两个处理函数都会调用.....只用if这句分别怎么处理呢...... 1. 有这两句
ON_MESSAGE(WM_SERVER_ACCEPT, OnServerAccept)
ON_MESSAGE(WM_SOCKET_READ, OnServerreadorclose)
不就区分开了么~ 消息ID对应了处理函数~ 你可以看看这个ON_MESSAGE宏的实现
2. 当对应ID的消息被Post到了消息队列里的时候 由消息循环来调用之(回调)
3. "是不是两个处理函数都会调用.....只用if这句分别怎么处理呢......"没看懂问什么。。。 楼主可以看看《深入浅出MFC》会有所帮助的~ [quote]原帖由 [i]唐尸三摆手[/i] 于 2008-5-14 15:57 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1278547&ptid=107434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
楼主可以看看《深入浅出MFC》会有所帮助的~ [/quote]
呵,中午看了这个书了....
其实我想问的是.....如果有一个事件消息,会调用哪个函数的呢....
我试验的结果是两个函数都会调用.......
[code]
如果在两个if前面加上一个MessageBox();的话...会发现两个都调用了...因为只可能有一个if成立...
所以只有一个函数执行实际上......
[/code] 估计这个网络通讯程序使用的事件通知模型,和一般的用户自定义消息还是有区别的,WSAAsyncSelect注册过通知回调函数后,Socket上有了事件肯定两个都调用.....然后你要检查 消息的低字是通知码,包含错误信息WSAGETSELECTERROR(lParam);可以获得,高字是消息码,你那WSAGETSELECTEVENT(lParam)就可以获得消息码,
你if前面加MsgBox肯定都有反应...[em20] [quote]原帖由 [i]Lemonade[/i] 于 2008-5-14 19:47 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1279186&ptid=107434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
估计这个网络通讯程序使用的事件通知模型,和一般的用户自定义消息还是有区别的,WSAAsyncSelect注册过通知回调函数后,Socket上有了事件肯定两个都调用.....然后你要检查 消息的低字是通知码,包含错误信息WSAGETSELECTER ... [/quote]
没太明白......不问了...还是自己看看书吧..... 楼主基础不好哦。
自己定义的消息是需要自己发送这个消息的。
你需要自己调用发生消息函数PostMessage
PostMessage(hWnd,WM_SERVER_ACCEPT,0,0) 这样OnServerAccept()函数会被调用。
PostMessage(hWnd,WM_SOCKET_READ,0,0) 这样OnServerreadorclose()函数会被调用。 [quote]原帖由 [i]花落无声[/i] 于 2008-5-18 12:05 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1292385&ptid=107434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
楼主基础不好哦。
自己定义的消息是需要自己发送这个消息的。
你需要自己调用发生消息函数PostMessage
PostMessage(hWnd,WM_SERVER_ACCEPT,0,0) 这样OnServerAccept()函数会被调用。
PostMessage(hWnd,WM_SOCKET_REA ... [/quote]
就是这样子
[size=2][color=#c60a00]PostMessage[/color](HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); [/size]
[[i] 本帖最后由 yiyanwan77 于 2008-5-18 12:10 编辑 [/i]] 噢....以前见过这个函数的,不知道是这么用的.......[em10] 7楼和8楼,楼主这个是网络通讯程序,事件通知模型,绑定后消息是由套接字内核对象发送的.....虽然消息ID是自定义的[em20] [quote]原帖由 [i]Lemonade[/i] 于 2008-5-18 13:49 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1293055&ptid=107434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
7楼和8楼,楼主这个是网络通讯程序,事件通知模型,绑定后消息是由套接字内核对象发送的.....虽然消息ID是自定义的[em20] [/quote]
大侠不如推荐本书吧.......[em10] 为什么我以前看过的书中没有这些个说法呢......[em15] [quote]原帖由 [i]zhponly[/i] 于 2008-5-18 14:25 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1293204&ptid=107434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
大侠不如推荐本书吧.......[em10] 为什么我以前看过的书中没有这些个说法呢......[em15] [/quote]
我也在做这个
推荐看孙鑫视频
配套书为vc++深入详解 [quote]原帖由 [i]Lemonade[/i] 于 2008-5-18 13:49 发表 [url=http://bbs.ghtt.net/redirect.php?goto=findpost&pid=1293055&ptid=107434][img]http://bbs.ghtt.net/images/common/back.gif[/img][/url]
7楼和8楼,楼主这个是网络通讯程序,事件通知模型,绑定后消息是由套接字内核对象发送的.....虽然消息ID是自定义的[em20] [/quote]
正是如此啊,看这个:
#define WM_RECVDATA WM_USER+1
afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);
HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,0);
DWORD WINAPI CChat::RecvProc(LPVOID lpParameter)
{
..................................
.....................
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempbuf);
return 0;
} 嗯,我明白了,我那个确实不是一个典型的用户自定义消息.
其实我是看过侯捷的那个书的,第三章说得很好,不过少了许多细节,写程序时联系不到一块儿,看了孙鑫的书才觉得恍然大悟啊........
那个确实应该两个都调用的........因为参数相同.....
呵....多谢各位..... 9楼说的对,我就是做这个的。
页:
[1]