日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GDI对象的初始化

發(fā)布時間:2023/12/9 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GDI对象的初始化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

GDI對象的初始化

一、GR_GraphicsFactory對象的初始化
在XAP_App對象的構(gòu)造函數(shù)中創(chuàng)建GR_GraphicsFactory對象。在XAP_Win32App構(gòu)造函數(shù)中,調(diào)用GR_GraphicsFactory對象的
registerClass函數(shù)初始化m_vAllocators、m_vDescriptors、m_vClassIds集合成員變量,前兩個分別是GR_Allocator、GR_Descriptor
函數(shù)指針。

二、GR_Graphics對象的初始化
在XAP_Win32FrameImpl::_createDocumentWindow函數(shù)中,根據(jù)各個窗口句柄創(chuàng)建GR_Graphics對象實例。
/* Create Graphics */
GR_Win32AllocInfo ai(GetDC(m_hwndContainer), m_hwndContainer);
GR_Win32Graphics * pG = (GR_Win32Graphics *)XAP_App::getApp()->newGraphics(ai);
函數(shù)內(nèi)部調(diào)用GR_GraphicsFactory對象的newGraphics函數(shù)
主要有:m_hwndContainer、m_hwndTopRuler、m_hwndLeftRuler、m_hwndDocument、m_hwndTopRuler、m_hwndLeftRuler
根據(jù)窗口句柄創(chuàng)建六個GR_Graphics對象。

三、GR_Font對象的初始化
1、FL_DocLayout對象在初始化時需要PD_Document和GR_Graphics對象的實例。GR_Graphics實例是用m_hwndDocument句柄
創(chuàng)建的對象。

2、創(chuàng)建字體對象實例
FL_DocLayout::findFont中調(diào)用GR_Graphics對象的findFont函數(shù)查找字體。首先,根據(jù)
pszFontFamily, pszFontStyle, pszFontVariant, pszFontWeight, pszFontStretch, pszFontSize屬性組成的鍵,查找
m_hashFontCache集合中是否存在該字體,如果找到返回該字體,否則,創(chuàng)建新的字體。

3、查找字體屬性
fp_Run::lookupProperties函數(shù)中
const PP_AttrProp * pSpanAP = NULL;
const PP_AttrProp * pBlockAP = NULL;
const PP_AttrProp * pSectionAP = NULL;?
初始化這三個變量。然后調(diào)用虛函數(shù)_lookupProperties,這個函數(shù)中會調(diào)用FL_DocLayout的findFont函數(shù)查找或創(chuàng)建字體

四、輸入字符
1、創(chuàng)建fp_TextRun對象
首先在fl_BlockLayout::_doInsertTextSpan函數(shù)中初始化GR_Itemization對象,在fl_BlockLayout::itemizeSpan函數(shù)中根據(jù)各個元素的字體屬性信息查找字體,設(shè)置GR_Itemization的語言、字體等,最后調(diào)用GR_Win32USPGraphics::itemize函數(shù),初始化GR_Win32USPItem對象。
其次,根據(jù)GR_Itemization對象創(chuàng)建fp_TextRun對象,調(diào)用fp_TextRun::setItem函數(shù),設(shè)置GR_Item對象

2、計算字符的寬度,初始化m_pRenderInfo對象
首先,創(chuàng)建GR_ShapingInfo對象,調(diào)用GR_Win32USPGraphics::shape函數(shù),創(chuàng)建GR_Win32USPRenderInfo對象實例
并且初始化
其次,在fp_TextRun::measureCharWidths函數(shù)中調(diào)用GR_Win32USPGraphics::measureRenderedCharWidths函數(shù),計算字符的寬度。

3、輸出字符
在fp_TextRun::_draw函數(shù)中畫字符。

轉(zhuǎn)載于:https://www.cnblogs.com/songtzu/p/3539768.html

總結(jié)

以上是生活随笔為你收集整理的GDI对象的初始化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。