WEB开发网
开发学院软件开发VC 根据文本串的长度改变窗口的大小 阅读

根据文本串的长度改变窗口的大小

 2008-02-26 20:27:35 来源:WEB开发网   
核心提示:这个结构含有用于菜单、消息及其它字体的LOGFONT结构,一旦你有了字体,根据文本串的长度改变窗口的大小(2),那如何知道显示给定的文本串需要多大的屏幕空间?这是Windows编程的一个共同问题,所幸的是,一旦你有了设备上下文,你就得创建字体对象并将它选进DC,Windows中有一个专门的函数,用它可以在屏幕的任何地方

这个结构含有用于菜单、消息及其它字体的LOGFONT结构。一旦你有了字体,那如何知道显示给定的文本串需要多大的屏幕空间?这是Windows编程的一个共同问题。所幸的是,Windows中有一个专门的函数,用它可以在屏幕的任何地方显示文本,这个函数就是 DrawText。在Windows中这是一个基本的文本显示函数。它的功能是在指定的屏幕坐标上显示(或者说绘制)文本串。

CDC dc = ...;

CRect rc = ...;

CString str = "Hello";

dc.DrawText(str, &rc, 0);

DrawText 在你指定的矩形框中显示文本-但是如果你不知道这个矩形应该是多大,该怎么办呢?这时有一个很容易的办法来计算矩形大小:

CRect rc(0,0,0,0);

dc.DrawText(str, &rc, DT_CALCRECT);

DrawText实际上并不绘制文本,而是计算出文本需要多少空间。DrawText改变传入矩形的大小以便适应文本的宽度和高度。调用DrawText之后,rc.Widtrh和rc.Height将返回文本的宽度和高度。你可以用希望的左上角坐标初始化CRect,即(rc.left,rc.top)代替(0,0)。然后DrawText将根据文本宽度和高度产生有下脚坐标。

当然,前面的代码段假设字体的设备上下文已经选定。仅仅用LOGFONT怎能行呢?如果你已经有一个DC,因为MFC把它传给你了(例如,当MFC调用视图的CView::OnDraw或宿主绘画项的CWnd::OnDrawItem时),你可以使用提供的DC作为你的设备上下文;否则,你必须调用下面的两个CDC创建函数之一。

// 创建客户DC

CClientDC dc(pMyWnd);

或者

// 创建window DC

CWindowDC dc(pMyWnd);

因为你不想真的画任何东西,所以使用那个设备上下文并不重要。只要你是创建屏幕DC-相对于打印机或者其它的设备而言,调用任何的CDC创建函数都行(除非你想要一个打印机的设备上下文)。

一旦你有了设备上下文,你就得创建字体对象并将它选进DC。这是标准的Windows图形编程。

// 创建字体

CFont font;

font.CreateFontIndirect(&ncm.lfMessageFont);

// 将字体选进DC

CFont* pOldFont = dc.SelectObject(&font);

// 计算文本大小

dc.DrawText(str, rc, DT_CALCRECT);

// 回复旧字体-这是必须的

dc.SelectObject(pOldFont); 

(完)

上一页  1 2 

Tags:根据 文本 长度

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接