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  }

 

转载于:https://www.cnblogs.com/ajuanabc/archive/2009/12/19/2463572.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值