windows程序设计的问题

来源:百度知道 编辑:UC知道 时间:2024/05/16 16:59:57
wsprintf (szBuffer, TEXT ("%5d"),GetSystemMetrics (sysmetrics[i].iIndex))

szBuffer被定义成TCHAR szBuffer[10];

结构体变量sysmetrics[i].iIndex的假设是TEXT ("SM_CXSCREEN").

在没执行wsprintf语句前 szBuffer[10]还没被赋值.我想知道执行完

wsprintf后szBuffer的值是多少.wsprintf在程序中起什么作用?谢谢!

wsprintf,这是一个字符串格式化函数,可以将数值按指定格式翻译成字符串,类似于C语言中的printf函数,它的原型是这样的:

int wsprintf(

LPTSTR lpOut, // 输出缓冲区地址

LPCTSTR lpFmt, // 格式化串地址

... // 变量列表

);

变量列表的数目由格式化字符串规定,wsprintf处理格式化字符串,遇到普通的字符则直接拷贝到输出,遇到%字符则代表有一个变量,%后面不同的字母表示不同的输出格式,如%d表示输出为整数,%x表示输出为16进制,%s表示输出字符串等。

%符号和表示格式的d,x和s等字母间可以用数字来指定输出时占用的位长,这时输出的位长不够时函数会用空格填齐。另外,表示位长的数字前可以加0来表示填齐时用“0”而非空格,如%08x表示输出为8位前面用0填齐的16进制数。wsprintf是Win32 API中惟一一个参数数量不定的函数,使用wsprintf函数的时候,参数的数量取决于格式化字符串中用%号指定的数量,变量列表的数目和格式化串中的%格式一定要一一对应。这里szReceive中有两个%号定义,那么后面就要额外跟两个参数:

invoke wsprintf,addr szBuffer,addr szReceive,lParam,lParam

这条语句将lParam的数值以及lParam的字符串按照szReceive格式化串定义的格式转换,并将结果存放到szBuffer中,然后程序将szBuffer中的内容在一个消息框中显示出来:

invoke MessageBox,hWnd,offset szBuffer,addr szCaptionMain,MB_OK