新手请教格式化对齐
小弟我初学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输出的字符串没那么长),怎么解释呢
请教一下大家,谢谢