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

reactos操作系统实现(163)

发布时间:2020-12-15 04:59:00 所属栏目:百科 来源:网络整理
导读:在应用程序里,当创建窗口之后,就需要把窗口显示出来,那么就需要调用函数 ShowWindow ,具体这个函数是怎么实现的呢?现在就来分析它的实现代码,如下: #001 EXTINLINE BOOL WINAPI #002 ShowWindow(HWND hWnd,int nCmdShow) #003 { 这里直接就调 WIN32K.

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

(编辑:李大同)

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

    推荐文章
      热点阅读