2013-01-23 41 views
0

我正在使用C++中主要是CoreFoundation的代码库。我不希望将Foundation对象引入尚未使用它们的源文件中。在CFAttributedString中设置删除线属性

我想创建一个CFAttributedString使用NSStrikethroughStyleAttribute,而无需首先创建一个NSAttributedString。我知道他们是免费桥接的,但如果可能的话,我宁愿保持这个源文件不含obj-c。

那么,有没有办法用strikethrough属性创建一个CFAttributedString而不经过Foundation,如果是这样,怎么办?

回答

0

我在这里假设这个CFAttributedString最终将最终由AppKit呈现。如果你使用CoreText进行渲染,那么你将不得不自己实施删除线程,因为CoreText没有它的属性(有一些Cocoanetics post带有一些示例代码)。

因此,假设字符串是由AppKit通过使用obj-c的应用程序的一部分呈现的,那么您真正想要的是以某种方式将常量NSStrikethroughStyleAttributeName暴露给您的C代码。

要做到这一点最简单的方法可能只是把它添加到您的文件的顶部:

export CFStringRef NSStrikethroughStyleAttributeName; 
+1

的字符串使用'CTLineDraw'渲染。经过一些实验后,我确信你是对的。我曾希望能够使用'NSAttributedString'可用的属性来设置'CFAttributedString',认为由于它们是免费桥接,所以应该可以,然后使用'CTLineDraw'进行渲染。不过,我认为AppKit能够利用CoreText渲染不能指向的属性字符串属性。 –

+0

@ChristopherCole:基本上,属性字符串只是一个与任意属性相结合的字符串,属性可以在字符串的不同点上有所不同。 AppKit定义了一组知道如何解释和渲染的属性。 CoreText定义了一个独立的集合。如果你愿意,你可以定义你自己的一组属性,并将它们用于任何你想要的。这实际上是Cocoanetics职位发生的事情;自定义删除线属性被定义,并且自定义绘图例程知道如何找到并解释它。 –

+0

谢谢。我认为我对归因字符串的用途以及如何使用这些属性有了更好的理解。 –