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

reactos操作系统实现(166)

发布时间:2020-12-15 04:58:56 所属栏目:百科 来源:网络整理
导读:NtUserRedrawWindow 函数主要用来重画窗口显示。具体代码如下: #001 BOOL APIENTRY #002 NtUserRedrawWindow(HWND hWnd,CONST RECT *lprcUpdate,HRGN hrgnUpdate, #003 UINT flags) #004 { #005 RECT SafeUpdateRect; #006 NTSTATUS Status; #007 PWINDOW_O

NtUserRedrawWindow函数主要用来重画窗口显示。具体代码如下:

#001 BOOL APIENTRY

#002 NtUserRedrawWindow(HWND hWnd,CONST RECT *lprcUpdate,HRGN hrgnUpdate,

#003 UINT flags)

#004 {

#005 RECT SafeUpdateRect;

#006 NTSTATUS Status;

#007 PWINDOW_OBJECT Wnd;

#008 DECLARE_RETURN(BOOL);

#009 USER_REFERENCE_ENTRY Ref;

#010

#011 DPRINT("Enter NtUserRedrawWindow/n");

进入界面临界区代码。

#012 UserEnterExclusive();

#013

获取窗口对象,或者获取桌面窗口对象。

#014 if (!(Wnd = UserGetWindowObject(hWnd ? hWnd : IntGetDesktopWindow())))

#015 {

#016 RETURN( FALSE);

#017 }

#018

如果更新窗口的大小不为空,就是固定大小的窗口更新。

#019 if (lprcUpdate != NULL)

#020 {

#021 Status = MmCopyFromCaller(&SafeUpdateRect,(PRECT)lprcUpdate,

#022 sizeof(RECT));

#023

#024 if (!NT_SUCCESS(Status))

#025 {

#026 SetLastWin32Error(ERROR_INVALID_PARAMETER);

#027 RETURN( FALSE);

#028 }

#029 }

#030

增加窗口的引用计数。

#031 UserRefObjectCo(Wnd,&Ref);

#032

调用函数co_UserRedrawWindow来更新窗口。

#033 Status = co_UserRedrawWindow(Wnd,NULL == lprcUpdate ? NULL : &SafeUpdateRect,

#034 hrgnUpdate,flags);

#035

减少窗口引用计数。

#036 UserDerefObjectCo(Wnd);

#037

如果执行不成功,就返回出错码。

#038 if (!NT_SUCCESS(Status))

#039 {

#040 /* IntRedrawWindow fails only in case that flags are invalid */

#041 SetLastWin32Error(ERROR_INVALID_PARAMETER);

#042 RETURN( FALSE);

#043 }

#044

#045 RETURN( TRUE);

#046

#047 CLEANUP:

#048 DPRINT("Leave NtUserRedrawWindow,ret=%i/n",_ret_);

退出临界区代码。

#049 UserLeave();

#050 END_CLEANUP;

#051}

(编辑:李大同)

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

    推荐文章
      热点阅读