马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 suxiang2014 于 2015-2-3 22:53 编辑
MessageBox 函数的 lpText 参数只允许是字符串。但是,如果我定义一个 int 型变量,并且赋值,用MessageBox显示这个变量的值要怎么做?有人会想到先用sprintf格式化,然后再调用MessageBox函数。但是sprintf仅支持ANSI版,所以需要用_vsntprintf函数重新自制一个MessageBoxPrint函数。
函数原型:int MessageBoxPrint (HWND hWnd , UINT uType , LPCTSTR lpCaption , LPCTSTR lpFormat , ...);
函数的参数与MessageBox相比顺序不一样,lpFormat这个参数与c语言的printf的第一个参数类似。
代码如下:#include <windows.h>
#include <tchar.h>
#include <stdio.h>
int MessageBoxPrint(HWND hWnd,UINT uType,LPCTSTR lpCaption,LPCTSTR lpFormat,...){
TCHAR buf[1024];
va_list va; //va_list相当于char *;
va_start(va,lpFormat); //相当于va = (char*)&lpFormat + 4;
_vsntprintf(buf,1024,lpFormat,va);
va_end(va); //相当于va = NULL;
return MessageBox(NULL,buf,lpCaption,uType);
}
int WINAPI WinMain(HINSTANCE hInstanse,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){
int k = 37,i = 888;
PTSTR str = TEXT("hello,world!");
MessageBoxPrint(NULL,MB_OKCANCEL,TEXT("显示变量的值"),TEXT("k = %d,i = %d\nstr = %s"),k,i,str);
return 0;
}
程序截图:
当然,这个函数的内容只能显示前面1024个字符,各位鱼油可以自己改进。
|