博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GDI对象的初始化
阅读量:4538 次
发布时间:2019-06-08

本文共 1758 字,大约阅读时间需要 5 分钟。

一、GR_GraphicsFactory对象的初始化

在XAP_App对象的构造函数中创建GR_GraphicsFactory对象。在XAP_Win32App构造函数中,调用GR_GraphicsFactory对象的
registerClass函数初始化m_vAllocators、m_vDescriptors、m_vClassIds集合成员变量,前两个分别是GR_Allocator、GR_Descriptor
函数指针。

二、GR_Graphics对象的初始化

在XAP_Win32FrameImpl::_createDocumentWindow函数中,根据各个窗口句柄创建GR_Graphics对象实例。
/* Create Graphics */
GR_Win32AllocInfo ai(GetDC(m_hwndContainer), m_hwndContainer);
GR_Win32Graphics * pG = (GR_Win32Graphics *)XAP_App::getApp()->newGraphics(ai);
函数内部调用GR_GraphicsFactory对象的newGraphics函数
主要有:m_hwndContainer、m_hwndTopRuler、m_hwndLeftRuler、m_hwndDocument、m_hwndTopRuler、m_hwndLeftRuler
根据窗口句柄创建六个GR_Graphics对象。

三、GR_Font对象的初始化

1、FL_DocLayout对象在初始化时需要PD_Document和GR_Graphics对象的实例。GR_Graphics实例是用m_hwndDocument句柄
创建的对象。

2、创建字体对象实例

FL_DocLayout::findFont中调用GR_Graphics对象的findFont函数查找字体。首先,根据
pszFontFamily, pszFontStyle, pszFontVariant, pszFontWeight, pszFontStretch, pszFontSize属性组成的键,查找
m_hashFontCache集合中是否存在该字体,如果找到返回该字体,否则,创建新的字体。

3、查找字体属性

fp_Run::lookupProperties函数中
const PP_AttrProp * pSpanAP = NULL;
const PP_AttrProp * pBlockAP = NULL;
const PP_AttrProp * pSectionAP = NULL; 
初始化这三个变量。然后调用虚函数_lookupProperties,这个函数中会调用FL_DocLayout的findFont函数查找或创建字体

四、输入字符

1、创建fp_TextRun对象
首先在fl_BlockLayout::_doInsertTextSpan函数中初始化GR_Itemization对象,在fl_BlockLayout::itemizeSpan函数中根据各个元素的字体属性信息查找字体,设置GR_Itemization的语言、字体等,最后调用GR_Win32USPGraphics::itemize函数,初始化GR_Win32USPItem对象。
其次,根据GR_Itemization对象创建fp_TextRun对象,调用fp_TextRun::setItem函数,设置GR_Item对象

2、计算字符的宽度,初始化m_pRenderInfo对象

首先,创建GR_ShapingInfo对象,调用GR_Win32USPGraphics::shape函数,创建GR_Win32USPRenderInfo对象实例
并且初始化
其次,在fp_TextRun::measureCharWidths函数中调用GR_Win32USPGraphics::measureRenderedCharWidths函数,计算字符的宽度。

3、输出字符

在fp_TextRun::_draw函数中画字符。

转载于:https://www.cnblogs.com/songtzu/p/3539768.html

你可能感兴趣的文章
基础-事务
查看>>
MAC下安装与配置MySQL [转]
查看>>
ERROR: ld.so: object '/usr/lib64/libtcmalloc.so.4' from LD_PRELOAD cannot be preloaded: ignored
查看>>
爬虫入门【10】Pyspider框架简介及安装说明
查看>>
android面试(4)---文件存储
查看>>
(转载) 标准C中的字符串操作函数
查看>>
如何提高android串口kernel log等级
查看>>
Docker快速配置指南
查看>>
Python基础---OS模块 (二)
查看>>
【JS点滴】substring和substr以及slice和splice的用法和区别。
查看>>
awk多模式匹配
查看>>
线段树
查看>>
a span等行内元素加margin属性后无效果解决方案
查看>>
傻瓜式硬盘重装win7系统图文加视频教程
查看>>
BZOJ 1607 [Usaco2008 Dec]Patting Heads 轻拍牛头:统计 + 筛法【调和级数】
查看>>
如果一个人请优雅的活着。
查看>>
验证码
查看>>
Django缓存配置
查看>>
Ubuntu下安装 Mysql
查看>>
LeetCode--Reverse Integer
查看>>