加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

reactos操作系统实现(174)

发布时间:2020-12-15 04:58:47 所属栏目:百科 来源:网络整理
导读:DispatchMessage 函数主要分发一个消息给窗口处理函数。具体实现代码如下: #001 LRESULT WINAPI #002 DispatchMessageW(CONST MSG *lpmsg) #003 { #004 LRESULT Ret = 0; #005 PWINDOW Wnd; #006 检查是否有窗口,如果有窗口,再判断窗口是否有效。 #007 if

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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读