| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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个字符,各位鱼油可以自己改进。 
 
 
 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |