在应用程序里,当创建窗口之后,就需要把窗口显示出来,那么就需要调用函数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 }