当前位置:C++技术网 > 资讯 > 完美记事项目:5 富文本框CRichEditCtrl的PARAFORMAT结构体说明

完美记事项目:5 富文本框CRichEditCtrl的PARAFORMAT结构体说明

更新时间:2015-06-26 12:36:37浏览次数:1+次

    PARAFORMAT结构体是富文本框实现段落格式化排版的结构体。此结构体对应于富文本框1.0,只含有最基本的排版,不过对于日常的使用,基本就够了。如果要支持更加丰富的排版,就需要使用2.0及以上版本的富文本框,同时段落格式结构体是PARAFORMAT2。PARAFORMAT2包含了PARAFORMAT结构体的所有,并扩展了许多。因此,先掌握PARAFORMAT结构体是很不错的选择。
    PARAFORMAT结构体中包含了富文本框的段落格式信息。此结构体可以使用EM_GETPARAFORMAT 和 EM_SETPARAFORMAT消息来获取和设置段落格式。PARAFORMAT2是富文本框2.0版本的结构体,是PARAFORMAT的扩展版,多了一下成员,支持更多的格式信息。
    PARAFORMAT结构体的声明如下:

typedef struct _paraformat { 
    UINT cbSize; // - 结构体大小
    DWORD dwMask; // - 结构体掩码,使用哪些成员和属性
    WORD  wNumbering; // - 段落前置符号
    WORD  wReserved;       // - 富文本框2.0对应的是wEffects
    LONG  dxStartIndent;   // - 段落第一行的缩进
    LONG  dxRightIndent; // - 相对于右边距的缩进
    LONG  dxOffset;           // - 二级缩进,相对于段落缩进的缩进
    WORD  wAlignment;   // - 段落对齐方式
    SHORT cTabCount;      // - Tab符的个数
    LONG  rgxTabs[MAX_TAB_STOPS]; // - Tap停止位置的绝对值数组
} PARAFORMAT; 

    下面详细介绍各个成员,不是MSDN的原版翻译,加入了个人的解释,帮助理解。使用PARAFORMAT定义一个变量pf。
cbSize:结构体的大小字节数。
    在使用结构体前必须设置此成员,一般也是最先设置此成员。此成员设置不对,会导致一些错误。使用方法就是:pf.cbSize = sizeof(PARAFORMAT)或者 sizeof(pf)。
dwMask:结构体成员属性掩码。
    因为结构体成员很多,结构体涵盖了各种各样的信息,而我们使用时并不是所有的都使用。如果提供太多的结构体也麻烦,采用掩码方式可以进行结构体成员选择使用,这种方式就将大量的信息集中在一个结构体中,然后使用时也只需要选择你需要的成员即可,其他的就不用 管。这种方式很不错,windows中几乎所有的大一点的结构体都采用这种方式,所以,你必须把这种方式玩熟。


这个掩码是对位进行操作的,使用宏可以设置各个需要使用的成员的掩码,掩码中有的成员就生效,没有的则不生效。使用“位或|”可以将多个成员的掩码组合在一起使用。

    可以设置的掩码如下:

?PFM_ALIGNMENT     段落对齐成员wAlignment有效。  
?PFM_NUMBERING     段落前置符号成员wNumbering 有效。  
?PFM_OFFSET  段落二级缩进成员dxOffset有效。 
?PFM_OFFSETINDENT 段落缩进成员dxStartIndent有效且要指定一个相对偏移,正数缩进,负数向外突出。  
?PFM_RIGHTINDENT 右缩进成员dxRightIndent有效。 
?PFM_RTLPARA  富文本框2.0中的文字特效成员wEffects有效,1.0中必须设置为0. 
?PFM_STARTINDENT   段落缩进成员dxStartIndent有效。 
?PFM_TABSTOPS 成员cTabStobs 和 rgxTabStops有效。 


说明一点:
     如果段落缩进PFM_STARTINDENT和段落二级缩进PFM_OFFSETINDENT同时有效,则段落缩进PFM_STARTINDENT优先,即PFM_STARTINDENT有效,PFM_OFFSETINDENT无效。

wNumbering:段落前置符号
     如果设置为0,则没有符号,如果设置为PFN_BULLET,则会在段落前设置着重号。
wReserved:保留,设置为0。

    富文本框对应于wEffects成员,可以参考PARAFORMAT2结构体的说明。
dxStartIndent :段落缩进(段落左缩进)。
     段落的第一行的缩进,即相对于左边缘的绝对值。以缇(twips)为单位。设置段落格式是设置光标所在的段落或者选中的多个段落。
扩展:
     [Twip]中文译为"缇",是一种和屏幕无关的长度单位,目的是为了让应用程序元素输出到不同设备时都能保持一致的计算方式。打印机的一个点,即我们说的“磅”,1磅 = 20缇,一英吋 = 1440缇,一公分 = 567 缇 ,也就是说,如果屏幕上某个对象的长度是1440 缇的话,将会印出一英吋来。
dxRightIndent :右缩进
     距右边缘的缩进距离,以缇为单位。选中的段落或者光标所在的段落整体右侧缩进,即整体向左缩进到中间。
dxOffset :段落二级缩进
     段落中的第一行外的所有行的相对于第一行产生的二级缩进。如果第一行缩进了,则会在第一行缩进的基础上缩进。如果是正数,则缩进,如果是负数,则向外突出。
wAlignment :段落对齐方式

?PFA_CENTER:居中对齐 
?PFA_LEFT:左对齐 
?PFA_RIGHT:右对齐


rgxTabs :Tab停止符绝对位置的数组。