微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

reactos操作系统实现(183)

UserDrawCaptionText函数实现窗口上标题显示。实现的代码如下:

#001 BOOL

#002 UserDrawCaptionText(HDC hDc,

#003 const PUNICODE_STRING Text,

#004 const LPRECT lpRc,

#005 UINT uFlags)

#006 {

#007 HFONT hOldFont = NULL,hFont = NULL;

#008 COLORREF OldTextColor;

#009 NONCLIENTMETRICSW nclm;

#010 NTSTATUS Status;

#011 #ifndef NDEBUG

#012 INT i;

#013 DPRINT("%s:",__FUNCTION__);

#014 for(i = 0; i < Text->Length/sizeof(WCHAR); i++)

#015 DbgPrint("%C",Text->Buffer[i]);

#016 DbgPrint(",%d/n",Text->Length/sizeof(WCHAR));

#017 #endif

#018

获取非客户区的大小。

#019 nclm.cbSize = sizeof(nclm);

#020 if(!IntSystemParametersInfo(SPI_GETNONCLIENTMETRICS,

#021 sizeof(NONCLIENTMETRICS),&nclm,0))

#022 {

#023 DPRINT1("%s: IntSystemParametersInfo() Failed!/n",__FUNCTION__);

#024 return FALSE;

#025 }

#026

设置显示文字方式为透明方式。

#027 IntGdisetBkMode(hDc,TRANSPARENT);

#028

创建显示字符串的字体。

#029 if(uFlags & DC_SMALLCAP)

#030 Status = TextIntCreateFontIndirect(&nclm.lfSmCaptionFont,&hFont);

#031 else Status = TextIntCreateFontIndirect(&nclm.lfCaptionFont,&hFont);

#032

#033 if(!NT_SUCCESS(Status))

#034 {

#035 DPRINT1("%s: TextIntCreateFontIndirect() Failed! Status: 0x%x/n",

#036 __FUNCTION__,Status);

#037 return FALSE;

#038 }

#039

选择字体到显示设备里。

#040 hOldFont = NtGdiselectFont(hDc,hFont);

#041 if(!hOldFont)

#042 {

#043 DPRINT1("%s: SelectFont() Failed!/n",__FUNCTION__);

#044 NtGdiDeleteObject(hFont);

#045 return FALSE;

#046 }

#047

设置字符串显示的颜色。

#048 if(uFlags & DC_INBUTTON)

#049 OldTextColor = IntGdisetTextColor(hDc,IntGetSysColor(COLOR_BTNTEXT));

#050 else OldTextColor = IntGdisetTextColor(hDc,IntGetSysColor(uFlags & DC_ACTIVE

#051 ? COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT));

#052

#053 //FIXME: If string doesn't fit to rc,truncate it and add ellipsis.

#054

调用函数GreExttextoutW显示字符串。

#055 GreExttextoutW(hDc,lpRc->left,

#056 lpRc->top,NULL,Text->Buffer,

#057 Text->Length/sizeof(WCHAR),0);

#058

恢复前面的颜色和字体,删除创建的字体。

#059 IntGdisetTextColor(hDc,OldTextColor);

#060 NtGdiselectFont(hDc,hOldFont);

#061 NtGdiDeleteObject(hFont);

#062

#063 return TRUE;

#064}

原文地址:https://www.jb51.cc/react/308338.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐