鱼C论坛

 找回密码
 立即注册
查看: 3286|回复: 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函数。

函数原型:
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;
}
程序截图:
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-11-23 13:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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