读文件并在对话框上显示出来

在OnPaint()中处理以下代码:就可实现 读文件并在对话框上显示出来

CPaintDC dc(this); // device context for painting
 /*
 RECT rect;
 GetClientRect(&rect);//下面这一行只能单行显示,不知要如何多行显示
 DrawText(dc.m_hDC, "Hello, Welcome to Windows!", -1,&rect,DT_VCENTER);
 */
    TEXTMETRIC tm;
 int xchar,ychar,line=0;
 char szBuffer[256];
 FILE *fp;
 dc.GetTextMetrics(&tm);
 xchar = tm.tmAveCharWidth;
 ychar = tm.tmHeight + tm.tmExternalLeading;
 if((fp = fopen("MtlTextOut.cpp", "r")) != NULL)
 {
  while(!feof(fp))
  {
   int i = 0;
   char ch;
   while((ch = fgetc(fp)) != '/n' && ch != EOF)
    szBuffer[i++] = (char)ch;
   dc.SetBkMode(TRANSPARENT);//设置背景透明
   dc.TextOut(xchar, line*ychar, szBuffer,i);
   line++;
  }
  fclose(fp);
 }

虽然DrawText()函数也可以显示多行信息,但在显示多行信息时, 经常使用的是函数TextOut()。为了显示多行信息,我们必须了解显示设备对象度量字体尺寸的方法,因此,本节先介绍这方面的内容。在本节给出的程序示例中,我们还要介绍WM_CREATE消息和借用显示设备对象的另一种方法。
  字样是一种基本的字符图案,具有特定的的衬线和笔划宽度,而字体指的是具有相同字样和尺寸的字符集。字体的尺寸用点来度量,点是印刷业中使用的度量字体的最小度量单位,每一英寸大约有72个点。有关字体的更详细的内容在以后章节介绍。
  应用程序可以使用Windows提供的不同字体,也可以使用在应用程序的可执行文件中定义和包含的专用字体。本节仅介绍应用程序如何获得有关字体尺寸方面的信息。使用TextOut函数显示多行文本时,需要确定字体字符的大小,以便根据字符的高度和宽度在用户区中显示多行文本。根据字符的高度可以在文本的相继行之间留出空距,而根据字符的宽度在文本的各列之间留出空距。
  结构类型TEXTMETRIC描述了与一种字体有关的基本信息,它的各域所给出的字体大小以逻辑单位表示(关于逻辑单位的介绍参见下一章)。该结构类型包含有许多域,图2-2给出了与字体垂直尺寸有关的五个域的定义。


图2-1 TEXTMETRIC结构类型中定义垂直尺寸字体的域

  tmInternalLeading的值是允许在一个字符上加上重音号的空隙量,tmExternalLeading的值是字体的设计者推荐的空隙量,在显示多行文本时程序员可以拒绝使用这个空隙量。
  在TEXTMETRIC结构类型中,有两个域用来定义字符的宽度:tmAveCharWidth表示字体字符的平均宽度,tmMaxCharWidth表示字体最宽的字符的宽度。Windows中使用两种类型的字体,一类是固定宽度的字体,固定宽度的字体的每个字符的宽度是一样的,这样tmAveCharWidth和tmMaxCharWidth两值相等;另一类是可变宽度的字体,对于这类字体,每个字符占用的宽度不一样。例如, 字符“w”和“i”的宽度就不同,使用可变宽度的字体可以绘制紧凑的文本。
  可以使用函数GetTextExtent计算出一个特定的文本行的宽度和高度,使用函数GetTextMetrics可以得到字符的有关尺寸,这两个函数的说明见表2-5。

  表2-5-1 GetTextExtent 函数
用 途 该函数使用设备对象当前使用的字体计算一个文本行宽度和高度(逻辑单位),在计算时不考虑当前裁剪区。
原 型 DWORD GetTextExtent(
  HDC hDC 设备对象句柄
  LPSTR lpString, 指向一个字符串
  int nCount 所要计算字符数。
);


返回值 返回字符串的尺寸,高度在高位字上,宽度在低位字上。

  表2-5-2 GetTextMetrics 函数
用 途 返回设备对象当前所使用的字体字符的有关尺寸。
原 型 DWORD GetTextMetrics(
  HDC hDC 设备对象句柄
  LPTEXTMETRIC lpMetric, 指向TEXTMETRIC类型的变量的指针,有关尺寸被放入该变量中。
);


返回值 若调用成功,返回非零,否则返回零。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值