reactos操作系统实现(174)

前端之家收集整理的这篇文章主要介绍了reactos操作系统实现(174)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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}

原文链接:https://www.f2er.com/react/308347.html

猜你在找的React相关文章