VC++路径
目录
路径
接上:VC++窗口重绘 OnDraw函数 添加字符串资源
接下:VC++字符输入 ASCII码
路径
void CTextView::OnDraw(CDC* pDC)
{CTextDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);CString str;str = _T("风灵");pDC->TextOut(100, 100, str);str.LoadString(IDS_STRINGVC);pDC -> TextOut(0, 200, str);// TODO: 在此处为本机数据添加绘制代码
}
在设备描述表中还有一个路径层(path bracket)的概念。什么是路径层呢?路径层的概念就像当年军阀割据时圈地那样,在地域上划定了界线,界线之内的是各自的地盘,别人不能侵犯。
在MFC中,创建路径层是利用CDC类提供的BeginPath和EndPath这两个函数来实现的,首先调用前者BeginPath,该函数的作用是在设备描述表中打开一个路径层;然后利用图形设备接口(GDI)提供的绘图函数进行绘图操作,例如绘制一些点、矩形、椭圆等;最后,在绘图操作完成之后,应用程序通过调用EndPath函数关闭这个路径层。
下面我们在路径层中绘制一个矩形,将先前输出的“风灵01”字符串框起来。如果要用一个矩形把字符串框起来,就需要知道这个字符串在窗口中的坐标值。在上述代码中,字符串“风灵01”是在坐标(100,100)处输出的,于是我们可以确定矩形的左上角坐标为(100,100),但是如何确定矩形的右下角坐标呢?对一个字符串来说,如果能够知道它的宽度和高度,再加上它的左上角坐标就能够得到包围这个字符串的矩形的右下角坐标了。我们能不能利用C 语言中的strlen 函数来获得字符串的宽度呢?strlen 这个函数获得的是字符串中字符的个数,而字符串在窗口中显示时占据的宽度并不是由其字符数来决定的。例如“w”和“i”同样都是一个字符,但它们所占据的宽度是不一样的。同时,字体的大小也会影响字符串在窗口中显示的宽度。另外,我们在使用Word时,经常会根据需要调整字间距,也就是说,字符和字符之间实际上是有间距的。由此可见,一个字符串在屏幕上显示的宽度是由多个方面的因素决定的,因此,希望利用strlen函数来获得字符串的宽度是根本无法做到的。CDC类为我们提供了一个GetTextExtent函数,利用这个函数可以获得一个字符串在屏幕上显示的宽度和高度,这个函数的一种声明形式如下所示:
CSize GetTextExtent(const CString& str
) const;
从上述声明中可以得知,我们需要给这个函数传