/*-----------------------------------------------------
SCRNSIZE.C -- Displays screen size in a message box
(c) Charles Petzold, 1998
-----------------------------------------------------*/
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
int CDECL MessageBoxPrintf (TCHAR * szCaption, TCHAR * szFormat, ...)
{
TCHAR szBuffer [1024] ;
va_list pArgList ;
// The va_start macro (defined in STDARG.H) is usually equivalent to:
// pArgList = (char *) &szFormat + sizeof (szFormat) ;
va_start (pArgList, szFormat) ;
// The last argument to wvsprintf points to the arguments
_vsntprintf (szBuffer, sizeof (szBuffer) / sizeof (TCHAR),
szFormat, pArgList) ;
// The va_end macro just zeroes out pArgList for no good reason
va_end (pArgList);
return MessageBox(NULL, szBuffer, szCaption, 0) ;
}
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
int cxScreen, cyScreen ;
cxScreen = GetSystemMetrics (SM_CXSCREEN) ;
cyScreen = GetSystemMetrics (SM_CYSCREEN) ;
MessageBoxPrintf (TEXT ("ScrnSize"),
TEXT ("The screen is %i pixels wide by %i pixels high."),
cxScreen, cyScreen) ;
return 0 ;
}
/**
sprintf的第一个参数是一个输出的缓冲区 它的第二个参数和后面的参数形式同printf相同
而vsprintf 它只有三个参数 当需要对可变参数执行像printf一样的格式化时 可以用vsprintf实现自己的函数
它的前两个参数为 输出字符缓冲区和一个格式化字符串 第三个参数是指向待格式化的参数数组的指针 实际上 指向堆栈中供函数调用的变量。
宏va_list va_start va_end 帮助处理堆栈指针
比如 sprintf 函数 可以用 vsprintf来这样编写
int sprintf(char * szBuffer,consst char * szFormat , ...)
{
int iReturn;
va_list pArgs;
va_start(pArgs,szFormat);
iReturn = vsprintf(szBuffer,szFormat,pArgs);
va_end(pArgs);
return iReturn;
}
*/
Unicode字符的引入--支持Unicode和Ascii编码的程序
最新推荐文章于 2022-06-11 10:08:33 发布