DispatchMessage 函数干了啥?
来源:互联网 发布:昆山远洋数据 编辑:程序博客网 时间:2024/04/27 16:35
DispatchMessage函数主要分发一个消息给窗口处理函数。具体实现代码如下:
#001 LRESULT WINAPI
#002 DispatchMessageW(CONST MSG *lpmsg)
#003 {
#004 LRESULT Ret = 0;
#005 PWINDOW Wnd;
#006
检查是否有窗口,如果有窗口,再判断窗口是否有效。
#007 if (lpmsg->hwnd != NULL)
#008 {
检查窗口的句柄是否有效。
#009 Wnd = ValidateHwnd(lpmsg->hwnd);
#010 if (!Wnd || SharedPtrToUser(Wnd->ti) != GetW32ThreadInfo())
#011 return 0;
#012 }
#013 else
#014 Wnd = NULL;
#015
定时器消息处理。
#016 if ((lpmsg->message == WM_TIMER || lpmsg->message == WM_SYSTIMER) && lpmsg->lParam != 0)
#017 {
获取定时消息处理的过程函数。
#018 WNDPROC WndProc = (WNDPROC)lpmsg->lParam;
#019
如果是系统的定时消息,就调用NtUserDispatchMessage函数。
#020 if ( lpmsg->message == WM_SYSTIMER )
#021 return NtUserDispatchMessage( (PMSG) lpmsg );
#022
这里调用应用程序自定义的定时器函数。
#023 Ret = WndProc(lpmsg->hwnd,
#024 lpmsg->message,
#025 lpmsg->wParam,
#026 GetTickCount());
#027 }
#028 else if (Wnd != NULL)
#029 {
如果窗口句柄不为空,说明都是窗口消息。
#030 // FIXME Need to test for calling proc inside win32k!
#031 if ( (lpmsg->message != WM_PAINT) ) // && !(Wnd->flags & W32K_CALLPROC) )
#032 {
调函数IntCallMessageProc处理窗口消息。
#033 Ret = IntCallMessageProc(Wnd,
#034 lpmsg->hwnd,
#035 lpmsg->message,
#036 lpmsg->wParam,
#037 lpmsg->lParam,
#038 FALSE);
#039 }
#040 else
这里调用NtUserDispatchMessage处理窗口消息。
#041 Ret = NtUserDispatchMessage( (PMSG) lpmsg );
#042 }
#043
#044 return Ret;
#045 }
- DispatchMessage 函数干了啥?
- DispatchMessage到底干了什么
- DispatchMessage函数
- DispatchMessage函数
- DispatchMessage函数
- DispatchMessage()函数
- DispatchMessage函数
- (14)DispatchMessage函数
- DispatchMessage
- 关于driver_register函数干了什么
- kthread_should_stop()这个函数干了什么?
- 最近几天我干了啥
- duilib中TranslateMessage函数和DispatchMessage函数
- C#对象诞生记之构造函数都干了啥
- 消息相关的函数DispatchMessage - 派发消息
- 3.fork()到底干了啥?
- 5.execve()到底干了啥?
- 7.switch_to到底干了啥?
- 通过Makefile编译一个三方的jar包的方法
- 为什么.NET程序第一次运行比较慢?
- 获取客户端的IP地址
- 关于线程
- 消息:ftok(), msgget(), msgsnd(),msgrcv(),msgctl()
- DispatchMessage 函数干了啥?
- 分组 去掉默认区别
- VC类中定义静态常量
- ssh: connect to host xxx port 22: Connection refused -ubuntu
- 一个简单的tab切换
- 梅姐5年合约价值1.41亿美元
- Excel开发(VBA)— 快速定位最后有记录的行
- myeclipse6.5连接oracle11G R2 ora-00604 ora-12705错误(转帖)
- 线程基础