VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 710|回复: 5

[求助] VC6.0 DrawText()问题

[复制链接]
71_avatar_middle
在线会员 zzw843 发表于 2017-7-5 09:41:13 | 显示全部楼层 |阅读模式
3驿站币
  1. for( j =0; j<nColCount; j++)
  2.                 {
  3.                         if(j<nColCount-1)
  4.                         {
  5.                                 rect.left=ca[j].nPrintX;
  6.                                 rect.top=nYMargin;
  7.                                 rect.right=ca[j+1].nPrintX;
  8.                                 rect.bottom=nYMargin+newchar;       
  9.                         }
  10.                         else
  11.                         {
  12.                                 rect.left=ca[j].nPrintX;
  13.                                 rect.top=nYMargin;
  14.                                 rect.right=nHorRes-300;
  15.                                 rect.bottom=nYMargin+newchar;
  16.                         }
  17.                         CString subitem = list.GetItemText(i, j);
  18.                         if(pdc.DrawText(subitem,rect,DT_CALCRECT)>newchar)
  19.                                 newchar=pdc.DrawText(subitem,rect,DT_CALCRECT)+50;
  20.                 }
  21.                 for( j =0; j<nColCount; j++)
  22.                 {
  23.                         if(j<nColCount-1)
  24.                         {
  25.                                 rect.left=ca[j].nPrintX;
  26.                                 rect.top=nYMargin;
  27.                                 rect.right=ca[j+1].nPrintX;
  28.                                 rect.bottom=nYMargin+newchar;       
  29.                         }
  30.                         else
  31.                         {
  32.                                 rect.left=ca[j].nPrintX;
  33.                                 rect.top=nYMargin;
  34.                                 rect.right=nHorRes-300;
  35.                                 rect.bottom=nYMargin+newchar;
  36.                         }
  37.                         CString subitem = list.GetItemText(i, j);
  38.                         if(newchar>nCharHeight)
  39.                         {
  40.                                 rect.top+=25;
  41.                                 rect.bottom-=25;
  42.                                 if(pdc.DrawText(subitem,rect,DT_WORDBREAK|DT_EDITCONTROL|DT_CALCRECT)<=nCharHeight)
  43.                                 {
  44.                                         pdc.DrawText(subitem,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  45.                                 }
  46.                                 else
  47.                                         pdc.DrawText(subitem,rect,DT_CENTER|DT_VCENTER|DT_WORDBREAK);
  48.                         }
  49.                         else
  50.                         {
  51.                                 pdc.DrawText(subitem,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
  52.                         }
  53.                         pdc.MoveTo(ca[j].nPrintX,nYMargin);
  54.                         pdc.LineTo(ca[j].nPrintX,nYMargin+newchar);       
  55.                 }
复制代码

各位大侠,以上是我的代码,用来绘制表格,第一个循环判断出最大文本占用高度,第二个循环绘制表格,现在问题是如果一行中有一个单元格需要自动换行,其他不需要换行的单元格执行pdc.DrawText(subitem,rect,DT_CENTER|DT_VCENTER|DT_SINGLELINE)时不能单行显示,我的目的是不需要换行的单行显示时居中,具体效果见图,急急急!!!!

QQ截图20170705093730.jpg




上一篇:vc2013 单文档如何禁止改变窗口大小
下一篇:如何给TChart控件添加标题

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2017-7-5 17:34:49 | 显示全部楼层
这个恐怕得经过计算才行,画之前先判断该单元格的文字是否会换行,之后认为换行的话,再进行描画改行的文字,算准坐标

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

71_avatar_middle
ico_lz  楼主| zzw843 发表于 2017-7-5 18:00:06 | 显示全部楼层
if(pdc.DrawText(subitem,rect,DT_WORDBREAK|DT_EDITCONTROL|DT_CALCRECT)<=nCharHeight)
这句就用用来判断是否所画文本是否需要换行,但是如果不需要换行,画出来的不能居中

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

71_avatar_middle
ico_lz  楼主| zzw843 发表于 2017-7-5 18:00:50 | 显示全部楼层
Syc 发表于 2017-7-5 17:34
这个恐怕得经过计算才行,画之前先判断该单元格的文字是否会换行,之后认为换行的话,再进行描画改行的文字 ...

if(pdc.DrawText(subitem,rect,DT_WORDBREAK|DT_EDITCONTROL|DT_CALCRECT)<=nCharHeight)
这句就用用来判断是否所画文本是否需要换行,但是如果不需要换行,画出来的不能居中

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

71_avatar_middle
ico_lz  楼主| zzw843 发表于 2017-7-5 21:38:01 | 显示全部楼层
Syc 发表于 2017-7-5 17:34
这个恐怕得经过计算才行,画之前先判断该单元格的文字是否会换行,之后认为换行的话,再进行描画改行的文字 ...

已经解决了,发现在执行pdc.DrawText(subitem,rect,DT_WORDBREAK|DT_EDITCONTROL|DT_CALCRECT)判断文本占用高度时,rect自动变成了文本占用的区域,已经不是原来设定的区域了,需要重新设定一下

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

51_avatar_middle
online_admins Syc 发表于 2017-7-5 22:24:07 | 显示全部楼层
zzw843 发表于 2017-7-5 21:38
已经解决了,发现在执行pdc.DrawText(subitem,rect,DT_WORDBREAK|DT_EDITCONTROL|DT_CALCRECT)判断文本占 ...

解决了就好~VC6.0 DrawText()问题

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-11-16 12:23

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表