【发布时间】:2010-04-18 16:05:07
【问题描述】:
我正在创建一个折线图控件,我需要编写(或者说绘制)轴名称和轴值。
我找到了 DrawText 和 TextOut 函数,但它们显示的文本闪烁,不知道如何设置字体和文本方向(我需要垂直文本方向和水平文本方向)。
您是否可以推荐任何其他功能或如何使用上述这些功能并获得我需要的结果?
【问题讨论】:
标签: c++ visual-c++ mfc
我正在创建一个折线图控件,我需要编写(或者说绘制)轴名称和轴值。
我找到了 DrawText 和 TextOut 函数,但它们显示的文本闪烁,不知道如何设置字体和文本方向(我需要垂直文本方向和水平文本方向)。
您是否可以推荐任何其他功能或如何使用上述这些功能并获得我需要的结果?
【问题讨论】:
标签: c++ visual-c++ mfc
我怀疑闪烁是由 DrawText 或 TextOut 引起的,而是由您的绘画方法引起的。如果您在绘制事件时重绘整个窗口,它可能会在您擦除整个窗口时闪烁,然后在重绘所有元素之前会出现明显的延迟。
仅对无效区域进行绘制可能可以可接受地减少闪烁;然而,这可能会变得复杂。更简单的方法是使用双缓冲;您在其中绘制到不可见的内存上下文,然后将其切换到可见上下文。
尝试 Google 的“MFC 双缓冲”以获得大量示例。
【讨论】:
听起来您正在寻找CMemDC,它基本上包装了您的CDC(或CPaintDC)。您对 CMemDC 进行所有绘图,然后在销毁时将自身复制到您的原始 CDC。
http://www.codeproject.com/KB/GDI/flickerfree.aspx
顺便说一句,Visual Studio 2010 已将此类添加到最新的 MFC:
【讨论】:
您可以通过执行 GetLogFont()、修改 LOGFONT 成员然后使用修改后的设置执行 CreateFontIndirect() 来设置字体和方向。这都是带有非常薄包装的 win32 内容,因此您可以阅读 Petzold 以获取详细信息和更多示例。
【讨论】: