标签:
//----------------------------------------- //本程序展示了如何实现MessageBoxPrintf函数 //本函数能像printf那样格式化输出 //摘录自:《windows程序设计第五版》 //----------------------------------------- #include<windows.h> #include<tchar.h> #include<stdio.h> int CDECL MessageBoxPrintf(TCHAR * szCaption, TCHAR * szFormat, ...) { TCHAR szBuffer[1024]; va_list pArgList; va_start (pArgList, szFormat); _vsntprintf_s(szBuffer,sizeof(szBuffer)/sizeof(TCHAR), sizeof(szBuffer) / sizeof(TCHAR),szFormat, pArgList); //--------------------------------------------------------------------------------------------------------------------------------- //原文使用_vsntprintf(szBuffer, sizeof(szBuffer) / sizeof(TCHAR),szFormat, pArgList); vs认为此函数具有安全性问题 因此我替换成上边的函数 //--------------------------------------------------------------------------------------------------------------------------------- va_end(pArgList); return MessageBox(NULL,szBuffer,szCaption,0); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { int cxScreen; int cyScreen; cxScreen = GetSystemMetrics(SM_CXSCREEN); cyScreen = GetSystemMetrics(SM_CYSCREEN); MessageBoxPrintf(TEXT("SCREEN SIZE"),TEXT("您的视屏显示器:\nWIDE:%i\nHIGH: %i"),cxScreen,cyScreen); return 0; }
这个函数使用了可变参数 这样就出现了一些陌生的东西,解释如下
CDECL
va_start va_end等
函数名称,读取可变参数的过程其实就是在堆栈中,使用指针,遍历堆栈段中的参数列表,从低地址到高地址一个一个地把参数内容读出来的过程
在学习windows程序设计时此函数可以给c/c++程序员一份熟悉感。。。。。。。。。。。
wndows程序设计之书籍知识与代码摘录-封装一个类似printf的messagebox
标签:
原文地址:http://www.cnblogs.com/xdblog/p/4821517.html