1.unicode中处理宽字符集

几个函数说明一下:
int _vsntprintf(char* str, size_t size, const char* format, va_list ap);
char *str ,把生成的格式化的字符串存放在这里.
size_t size [in], str可接受的最大字符数 (非字节数,UNICODE一个字符两个字节),防止产生数组越界.
const char *format [in], 指定输出格式的字符串,它决定了你需要提供的可变参数的类型、个数和顺序。
va_list ap, va_list变量
函数功能:将可变参数格式化输出到一个字符数组。
用法类似于vsprintf,不过加了size的限制,防止了内存溢出(size为str所指的存储空间的大小)。
返回值:执行成功,返回最终生成字符串的长度,若生成字符串的长度大于size,则将字符串的前size个字符复制到str,同时将原串的长度返回(不包含终止符);执行失败,返回负值,并置errno.

#include 
#include 
#include 
#include 

int CDECL MessageBoxPrintf(TCHAR* szCaption,TCHAR* szFormat,...)
{
	TCHAR szBuffer[1024];
	va_list pArgList;
	va_start(pArgList,szFormat);

	_vsntprintf(szBuffer,sizeof(szBuffer)/sizeof(TCHAR),szFormat,pArgList);

	va_end(pArgList);

	return MessageBox(NULL,szBuffer,szCaption,0);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR szCmdLine,int iCmdShow)
{
	int cxScreen = GetSystemMetrics(SM_CXSCREEN);
	int cyScreen = GetSystemMetrics(SM_CYSCREEN);

	//MessageBox(NULL,TEXT("取得X和Y轴坐标"),TEXT("提示"),MB_OK);
	MessageBoxPrintf(TEXT("取得X和Y轴坐标"),TEXT("X坐标为%i像素,Y坐标为%i像素!,x = %i,y = %i"),cxScreen,cyScreen,1,2);
	return 0;
}

你可能感兴趣的:(win32,API)