ct tagSIZE {
LONG cx;
LONG cy;
} SIZE, *PSIZE;
通过计算字符串的起始坐标与字符串宽度之和,即可得到后续文本的起始坐标。例如,
枫叶文学网www.fywxw.com
第6 章 文本和字体类
·153·
X 轴起始坐标为cx0,如果当前字符串的尺寸信息存储在size 指向的SIZE 结构中,则后续文
本的起始坐标cx1 为:
cx1 = cx0 + size.cx;
(2)确定换行时的文本坐标
通过计算当前行文本字符的高度与行间隔之和,即可得到换行时文本的起始坐标,上述
两个数值可通过获取当前字体的信息得到,如果当前字体的信息存储在tm 指向的
TEXTMETRICS 结构中,则换行时Y 轴上文本的起始坐标cy 为:
cy = tm.tmHeight + tm.tmExternalLeading;
3.文本输出
Windows 程序设计时用得最多的文本输出函数便是Textout,其API 的函数原型如下:
BOOL TextOut(
HDC hdc, // DC 句柄
int nXStart, // 起始点X 坐标
int nYStart, //起始点Y 坐标
LPCTSTR lpString, // 输出的字符串
int cbString // 输出的字符串中字符数目
);
通过调用此函数,可以在指定位置输出文本。
6.4 字体和文本输出实例
实例6-1:字体和文本输出实例。源代码在光盘中“\06\实例6-1\gundong”目录下。
本节实现了一个动态字幕的例子。从本例中读者可以学习到动态地改变文本坐标来实现
实现动态字幕的方法。该示例是基于对话框模式的,通过改变文本的坐标然后进行实时刷新
来显示字幕,屏幕刷新通过定时器来实现。。
本例的部分核心源代码如下。
CGundongDlg::CGundongDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGundongDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGundongDlg)
// NOTE: the ClassWizard will addcommber initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
WidthX=200;
minWidth=10;
Heighty=15;
枫叶文学网www.fywxw.com
Visual C++ 6.0 程序设计从入门到精通
·154·
m