《WINDOWS程序设计》第四章关于TEXTOUT的小问题
jsdfd原文是这样说的。
很清楚需要显示格式化的数字和简单的字符串。 正如第2章所述,不能使用习惯的工具。(
爱的printf函数)来完成此任务,但可以使用sprintf和Windows版的sprintf-wsprintf。 这些信
数量与printf相似,只是将格式化字符串放入字符串中。 然后,可以通过TextOut将字符串输出到显示器。
方便的是,从sprintf和wsprintf返回的值是字符串的长度。 把这个值传递给TextOut
长度参数。 以下程序代码显示了wsprintf和TextOut的典型组合。
int iLength;
TCHAR szBuffer [40];
其他行程序
Ilength=wsprintf(SZbuffer,text ) ' thesumof%Iand%Iis%I ' )、
iA、iB、iA iB;
textout(HDC,x,y,szBuffer,iLength );
在这种简单的情况下,不需要定义iLength,因为nLength的定义值可以与TextOut包含在同一说明中。
textout(HDC,x,y,szBuffer,
wprintf(SZbuffer,text ) ' thesumof%Iand%Iis%I ' ),
() iA、iB、iA iB );
这个样子不漂亮,但功能和前者一样。
综合使用
问题1 :
示例代码
Ilength=wsprintf(SZbuffer,text ) ' thesumof%Iand%Iis%I ' )、
iA、iB、iA iB;
textout(HDC,x,y,szBuffer,iLength );
的格式字符%i是什么意思? 我读了很多关于c语言的书,但是找不到这个格式文字。
问题2 :
在处理WM_PAINT消息时,示例程序SYSMETS1中的WndProc函数如下所示:
case WM_PAINT :
HDC=beginpaint(HWND,ps );
for(I=0; i NUMLINES; I )
{
textout(HDC,0,cyChar * i,
sysmetrics[I].SZ级别,
Lstrlen(sysmetrics[I].SZ级别);
textout(HDC,22 * cxCaps,cyChar * i,
sysmetrics[i].szDesc,
Ltrlen(sysmetrics[I].SZdesc );
设置文本对齐(hdc,TA_RIGHT | TA_TOP );
textout(HDC,22 * cxCaps 40 * cxChar,cyChar * i,szBuffer,
wprintf(SZbuffer,text ) ')、
getsystemmetrics (sys metrics [ I ].iindex );
设置文本对齐(hdc,TA_LEFT | TA_TOP );
}
endpaint(hwnd,ps );
返回0;
其中的:
textout(HDC,0,cyChar * i,
sysmetrics[I].SZ级别,
Lstrlen(sysmetrics[I].SZ级别);
和
textout(HDC,22 * cxCaps,cyChar * i,
sysmetrics[i].szDesc,
Ltrlen(sysmetrics[I].SZdesc );
为什么不在wsprintf中处理显示的字符串? 就像后面一样
textout(HDC,22 * cxCaps 40 * cxChar,cyChar * i,szBuffer,
wprintf(SZbuffer,text ) ')、
getsystemmetrics (sys metrics [ I ].iindex );
是的。