标题:新手请教格式化对齐
只看楼主
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
结帖率:100%
 问题点数:0 回复次数:1 
新手请教格式化对齐
小弟我初学windows程序设计,遇到几个问题,来请教
这是消息循环中处理WM_PAINT 的代码
case WM_PAINT :
          hdc = BeginPaint (hwnd, &ps) ;

          for (i = 0 ; i < NUMLINES ; i++)
          {
               TextOut (hdc, 0, cyChar * i,                     
                        sysmetrics[i].szLabel,
                        lstrlen (sysmetrics[i].szLabel)) ;

               TextOut (hdc, 22* cxCaps, cyChar * i,      
                        sysmetrics[i].szDesc,
                        lstrlen (sysmetrics[i].szDesc)) ;

               SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;

               TextOut (hdc, 22 * cxCaps + 40 * cxChar, cyChar * i, szBuffer,
                        wsprintf (szBuffer, TEXT ("%5d"),
                             GetSystemMetrics (sysmetrics[i].iIndex))) ;

               SetTextAlign (hdc, TA_LEFT | TA_TOP) ;
          }
          EndPaint (hwnd, &ps) ;
          return 0 ;
效果图

书中关于第三条TextOut语句这样解释
变宽字体使得格式化右对齐的数值有些棘手,从0到9的数字具有相同的宽度,但是这个宽度比空格宽度大,数值可以为一个或者多个数字宽,所以不同的数值应该从不同的横向位置开始。
所以,采用右对齐数值会容易些,用SetTextAlign来实现
1.虽然空格和宽度的大小不一样,但是输出数值的位置不都是指定在22 * cxCaps + 40 * cxChar这里吗,不是应该位置是固定的吗,为什么没有这一句SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;但输出来的数值不是左对齐呢?该如何理解那段话呢
2.按书上所说,好像左对齐挺困难,那我偏要数值左对齐该怎么实现呢
3.我查了下msdn,里面说SetTextAlign (hdc, TA_LEFT | TA_TOP),解释中第二个参数都要有一个参考点,请问这个参考点具体指什么,怎么确定呢
4.我把最后一个 SetTextAlign (hdc, TA_LEFT | TA_TOP) ;改为 SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;
效果图

就是除了第一行有SW_CXSCREEN外,从第二行开始都没了,我知道这是被第二个TextOut覆盖掉了,但是不是应该只是覆盖一部分吗,左边应该还有一些SW什么的没被覆盖的东西(因为第二个TextOut输出的字符串没那么长),怎么解释呢
请教一下大家,谢谢
搜索更多相关主题的帖子: windows 程序设计 
2011-07-16 19:51
specilize
Rank: 4
等 级:业余侠客
帖 子:126
专家分:247
注 册:2011-2-20
得分:0 
怎么没人的
2011-07-17 18:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-345635-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.182433 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved