在Win32编程中经常需要像使用printf一样使用MessageBox,然而win32并没有直接提供这样的函数,我们就自己实现一下。

    下面是效果图:

   

    图中的第1名的数字1是通过格式化显示的,和printf一样格式化的。使用很方便,其他地方,和MessageBox一样使用。

        为了方便在Win32中格式化消息,不必每次都用sprintf等函数来格式化字符串,在再次学习《Windows程序设计》时,发现这个内容在编程时非常常用,所以做一个基本的改动,并分享出来,在日后编程时可以参考使用。
    带参数的消息框函数自定义实现代码如下:

int MessageBoxParam(HWND hwnd,TCHAR* szTitle,UINT uType,TCHAR* szFormat,...)
{
    TCHAR szBuffer[1024];
    va_list pArgList;// - va_list宏定义于stdarg.h
    va_start(pArgList,szFormat);// - va_start宏定义于stdarg.h,
    _vsntprintf(szBuffer,sizeof(szBuffer)/sizeof(TCHAR),szFormat,pArgList);// - 需要stdio.h
    va_end(pArgList);// - va_end宏定义于stdarg.h
    return MessageBox(hwnd,szBuffer,szTitle,uType);
}

    使用MessageBoxParam:
int i=0;
LPTSTR lpStr = _T("C++技术网www.cjjjs.com");
MessageBoxParam(NULL,_T("C++技术网提示"),MB_YESNO,_T("第%d名,%s"),i,lpStr);

    第一个参数就是窗口句柄,第二个参数为消息框的标题,第三个参数为消息框类型,这些都是简单的调用MessageBox函数需要的。消息的内容则是最后两个参数格式化和参数列表来支持。这个格式化和printf一样使用,非常方便。这样就克服了Win32MessageBox格式消息不方便的问题。