suxiang2014 发表于 2015-1-31 00:11:26

自制MessageBox函数,比系统自带MessageBox函数好用

本帖最后由 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;
        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个字符,各位鱼油可以自己改进。


零度C 发表于 2015-1-31 00:52:05

{:9_240:}楼主辛苦..路过路过

小甲鱼 发表于 2015-1-31 01:17:28

不错,支持下,有想法~

suxiang2014 发表于 2015-1-31 01:43:34

小甲鱼 发表于 2015-1-31 01:17
不错,支持下,有想法~

嘻嘻,那么晚不睡,学我

freeparty 发表于 2015-1-31 05:17:32

信息框函数在系统内部是有同时创建使用计数的,而且会中断程序运行,你的行吗,

jejne 发表于 2015-1-31 10:08:25

厉害

suxiang2014 发表于 2015-1-31 10:44:33

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

不行,这个自制的函数比较粗糙

freeparty 发表于 2015-1-31 12:52:47

suxiang2014 发表于 2015-1-31 10:44
不行,这个自制的函数比较粗糙

!@R键! 发表于 2015-2-2 20:12:06

。。。:shock:

!@R键! 发表于 2015-2-8 11:47:24

这个不是猎豹网上的函数吗?。。。
页: [1]
查看完整版本: 自制MessageBox函数,比系统自带MessageBox函数好用