reactos操作系统实现(163)

在应用程序里,当创建窗口之后,就需要把窗口显示出来,那么就需要调用函数ShowWindow,具体这个函数是怎么实现的呢?现在就来分析它的实现代码,如下:

#001  EXTINLINE BOOL WINAPI

#002  ShowWindow(HWND hWnd, int nCmdShow)

#003  {

 

       这里直接就调WIN32K.SYS里的代码了。

#004      return NtUserShowWindow(hWnd, nCmdShow);

#005  }

 

内核里实现显示窗口的函数,实现的代码如下:

#001  BOOL APIENTRY

#002  NtUserShowWindow(HWND hWnd, LONG nCmdShow)

#003  {

#004     PWINDOW_OBJECT Window;

#005     BOOL ret;

#006     DECLARE_RETURN(BOOL);

#007     USER_REFERENCE_ENTRY Ref;

#008 

#009     DPRINT("Enter NtUserShowWindow/n");

 

进入界面临界区代码。

#010     UserEnterExclusive();

#011 

 

通过窗口句柄获取当前窗口的对象。

#012     if (!(Window = UserGetWindowObject(hWnd)))

#013     {

#014        RETURN(FALSE);

#015     }

#016 

 

增加窗口的引用计数。

#017     UserRefObjectCo(Window, &Ref);

 

调用函数co_WinPosShowWindow来显示窗口出来。

#018     ret = co_WinPosShowWindow(Window, nCmdShow);

 

减少窗口的引用计数。

#019     UserDerefObjectCo(Window);

#020 

#021     RETURN(ret);

#022 

#023  CLEANUP:

#024     DPRINT("Leave NtUserShowWindow, ret=%i/n",_ret_);

 

退出临界区代码。

#025     UserLeave();

#026     END_CLEANUP;

#027  }

 

posted @ 2009-12-19 21:07  ajuanabc  阅读(143)  评论(0编辑  收藏  举报