鱼C论坛

 找回密码
 立即注册
查看: 2955|回复: 9

[技术交流] 自制MessageBox函数,比系统自带MessageBox函数好用

[复制链接]
发表于 2015-1-31 00:11:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 suxiang2014 于 2015-2-3 22:53 编辑

MessageBox 函数的 lpText 参数只允许是字符串。但是,如果我定义一个 int 型变量,并且赋值,用MessageBox显示这个变量的值要怎么做?有人会想到先用sprintf格式化,然后再调用MessageBox函数。但是sprintf仅支持ANSI版,所以需要用_vsntprintf函数重新自制一个MessageBoxPrint函数。

函数原型:
  1. int MessageBoxPrint (HWND hWnd , UINT uType , LPCTSTR lpCaption , LPCTSTR lpFormat , ...);
复制代码
函数的参数与MessageBox相比顺序不一样,lpFormat这个参数与c语言的printf的第一个参数类似。

代码如下:
  1. #include <windows.h>
  2. #include <tchar.h>
  3. #include <stdio.h>

  4. int MessageBoxPrint(HWND hWnd,UINT uType,LPCTSTR lpCaption,LPCTSTR lpFormat,...){
  5.         TCHAR buf[1024];
  6.         va_list va;  //va_list相当于char *;

  7.         va_start(va,lpFormat);  //相当于va = (char*)&lpFormat + 4;
  8.         _vsntprintf(buf,1024,lpFormat,va);
  9.         va_end(va);  //相当于va = NULL;

  10.         return MessageBox(NULL,buf,lpCaption,uType);
  11. }
  12. int WINAPI WinMain(HINSTANCE hInstanse,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow){
  13.         int k = 37,i = 888;
  14.         PTSTR str = TEXT("hello,world!");

  15.         MessageBoxPrint(NULL,MB_OKCANCEL,TEXT("显示变量的值"),TEXT("k = %d,i = %d\nstr = %s"),k,i,str);
  16.        
  17.         return 0;
  18. }
复制代码
程序截图:
QQ截图20150131001054.jpg

当然,这个函数的内容只能显示前面1024个字符,各位鱼油可以自己改进。


评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +5 收起 理由
小甲鱼 + 5 + 5 + 5 有想法!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-31 00:52:05 | 显示全部楼层
  楼主辛苦..路过路过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-31 01:17:28 | 显示全部楼层
不错,支持下,有想法~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-31 01:43:34 | 显示全部楼层
小甲鱼 发表于 2015-1-31 01:17
不错,支持下,有想法~

嘻嘻,那么晚不睡,学我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-31 05:17:32 | 显示全部楼层
信息框函数在系统内部是有同时创建使用计数的,而且会中断程序运行,你的行吗,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-31 10:08:25 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-1-31 10:44:33 | 显示全部楼层
freeparty 发表于 2015-1-31 05:17
信息框函数在系统内部是有同时创建使用计数的,而且会中断程序运行,你的行吗,

不行,这个自制的函数比较粗糙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-31 12:52:47 | 显示全部楼层
suxiang2014 发表于 2015-1-31 10:44
不行,这个自制的函数比较粗糙

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-2 20:12:06 | 显示全部楼层
。。。:shock:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-8 11:47:24 | 显示全部楼层
这个不是猎豹网上的函数吗?。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-18 20:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表