reactos操作系统实现(181)

前端之家收集整理的这篇文章主要介绍了reactos操作系统实现(181)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

NtUserDrawCaption是内核函数,主要用来实现显示窗口标题

#001 BOOL

#002 APIENTRY

#003 NtUserDrawCaption(HWND hWnd,

#004 HDC hDC,

#005 LPCRECT lpRc,

#006 UINT uFlags)

#007 {

这里主要调用函数NtUserDrawCaptionTemp来实现相应的功能

#008 return NtUserDrawCaptionTemp(hWnd,hDC,lpRc,NULL,uFlags);

#009 }

函数NtUserDrawCaptionTemp实现如下:

#001 BOOL

#002 APIENTRY

#003 NtUserDrawCaptionTemp(

#004 HWND hWnd,

#005 HDC hDC,

#006 LPCRECT lpRc,

#007 HFONT hFont,

#008 HICON hIcon,

#009 const PUNICODE_STRING str,

#010 UINT uFlags)

#011 {

#012 PWINDOW_OBJECT pWnd = NULL;

#013 RECT SafeRect;

#014 UNICODE_STRING SafeStr = {0};

#015 BOOL Ret = FALSE;

#016

进入临界区代码

#017 UserEnterExclusive();

#018

如果窗口句柄不为空,就获取窗口的对象。

#019 if (hWnd != NULL)

#020 {

#021 if(!(pWnd = UserGetWindowObject(hWnd)))

#022 {

#023 UserLeave();

#024 return FALSE;

#025 }

#026 }

#027

#028 _SEH2_TRY

#029 {

获取窗口的大小。

#030 ProbeForRead(lpRc,sizeof(RECT),sizeof(ULONG));

#031 RtlCopyMemory(&SafeRect,sizeof(RECT));

#032 if (str != NULL)

#033 {

获取窗口标题显示的字符串。

#034 SafeStr = ProbeForReadUnicodeString(str);

#035 if (SafeStr.Length != 0)

#036 {

#037 ProbeForRead(SafeStr.Buffer,

#038 SafeStr.Length,

#039 sizeof(WCHAR));

#040 }

调用函数UserDrawCaption显示窗口的标题

#041 Ret = UserDrawCaption(pWnd,&SafeRect,hFont,hIcon,&SafeStr,uFlags);

#042 }

#043 else

#044 Ret = UserDrawCaption(pWnd,uFlags);

#045 }

这里是异常出错处理。

#046 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)

#047 {

#048 SetLastNtError(_SEH2_GetExceptionCode());

#049 }

#050 _SEH2_END;

#051

#052 UserLeave();

#053 return Ret;

#054}

猜你在找的React相关文章