在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格式消息不方便的问题。