参考:
1.
2.
创建、显示、和操作一个消息框,消息窗口有一个带关闭按钮的标题列、一个选项图标、一行或多行文字,以及最多四个按钮,以简短的应用程序特定的信息,如状态或错误信息等。 该消息框返回一个整数,指示用户单击了哪个按钮。
快手函数基本原型
win.msgbox( 消息,标题,样式,父窗口 ) |
说明:除第一个参数以外,其他参数可选。样式默认为 0x2000/*_MB_TASKMODAL*/
win.msgbox( "这是一个测试对话框", "对话框标题", 0x40/*_MB_ICONINFORMATION*/|0x3/*_MB_YESNOCANCEL*/)
|
注意:win.msgbox弹出的窗口默认是没有父窗口的(父窗口=0)
这就导致用户可以在任务栏切换其他窗口到弹出的消息对话框前面,而消息对话框又阻塞了线程,
导致前置的窗口不能响应用户的任何操作。
win.form类创建的对象提供msgbox成员函数,该函数可自动指定父窗口。
因此在窗体中,推荐使用窗体对象的的msgbox函数
如
import win.ui; /*DSG{{*/ var winform = win.form(parent=...; min=1;bottom=249;max=1;text="AAuto Form";right=349 ) winform.add( button={ bottom=131;text="button";left=110;right=219;top=79;z=0;cls="button"} ) /*}}*/
winform.button.oncommand = function(id,event){ winform.msgbox("你不可能把我折腾到父窗体后面去") }
winform.show(true) win.loopMessage();
|
函数拓展
ok = win.msgboxTest( 消息,标题,父窗口 ) |
说明:除第一个参数外,其他参数可选,该函数调用win.msgbox弹出一个带确定按钮、取消按钮的询问对话框,如果用户按确定返回true,否则返回false。
自动关闭消息框
win.msgboxTimeout("消息","标题",时间) |
快手基本语法(智能提示):
win.msgbox("__","AAuto")= 弹出消息框
win.msgboxTimeout("__","标题") = 弹出对话框,超时自动关闭
win.msgboxTimeout("__","标题",3000) = 弹出对话框,超时自动关闭
win.msgboxTest("",""); = @win.msgboxTest("询问用户的信息","标题")//返回布尔值表示用户是否按了“确定”按钮。 “确定”返回值=1,“取消”返回值=0
软件范例---自动关闭对话框
import win
win.msgboxTimeout("此对话框3秒后自动关闭","标题",3000) 样式 = 2 // 0、确认钮; 1、确认取消钮; 2、放弃重试忽略钮; 3、取消是否钮; 4、是否钮; 5、重试取消钮 ret = win.msgboxTimeout("此对话框3秒后自动关闭","标题",3000,样式) //返回值: 1、确定钮; 2、取消钮; 3、终止钮; 4、重试钮; 5、忽略钮; 6、是钮; 7、否钮
|
按钮返回值
1=确定钮; IDOK
2=取消钮; IDCANCEL
3=终止钮; IDABORT
4=重试钮; IDRETRY
5=忽略钮; IDIGNORE
6=是钮; IDYES
7=否钮; IDNO
控制台验证按钮返回值
io.open();//打开控制台
import.win io.print(win.msgbox("询问用户的信息","标题" , 0x5/*_MB_RETRYCANCEL*/)); //或io.print(win.msgbox("询问用户的信息","标题" , 5);
execute("pause") //按任意键继续 io.close();//关闭控制台
|
按钮样式及常量(可用【样式=数字】表示)
0、确定按钮; _MB_OK=@0x0
1、确定、取消按钮; _MB_OKCANCEL=@0x1
2、终止、重试、忽略按钮; _MB_ABORTRETRYIGNORE=@0x2
3、是、否、取消按钮; _MB_YESNOCANCEL=@0x3
4、是、否按钮; _MB_YESNO=@0x4
5、重试取消钮; _MB_RETRYCANCEL=@0x5
6、终止、重试、继续 0x00000006(需声明API才能使用)
图标常量
_MB_ICONASTERISK=@0x40/*_MB_ICONASTERISK*///“i”图标
_MB_ICONEXCLAMATION=@0x30/*_MB_ICONEXCLAMATION*///“!”号图标
_MB_ICONHAND=@0x10/*_MB_ICONHAND*/ //“×”号图标
_MB_ICONINFORMATION=@0x40/*_MB_ICONINFORMATION*/ //“i”图标
_MB_ICONMASK=@0xF0/*_MB_ICONMASK*/ //“i”图标
_MB_ICONQUESTION=@0x20/*_MB_ICONQUESTION*///“?”号图标
_MB_ICONSTOP=@0x10/*_MB_ICONSTOP*///“×”号图标
进阶篇:声明 api用法
快手包含大部分函数,也有极少部分没包含,此时就需要声明API函数,可见快手帮助示例:
//声明API调用示例 //===================================================== //导入DLL User32 := raw.loadDll("User32.dll"); //声明API函数 //声明函数原形的方式遵循C语法 messageBox := User32.api( "MessageBoxA", " void ( int hWnd, string lpText,string lpCaption ,INT uType )","stdcall") //最后一个参数可以省略
//使用API函数 messageBox( 0, "这是一个测试对话框", "对话框标题", 0x00004023 )
|
INT uTyp样式说明: 0x00004023 (在快手还可以这样写0x4023)
4 - 是帮助按钮(MB_HELP)【快手没有】
2 - 是图标 (分别是1,2,3,4)
3 - 是按钮(分别是1,2,3,4,5,6)
_MB_APPLMODAL=@0x0/*_MB_APPLMODAL*/ //应用程序模式,在未结束对话框前也能切换到另一应用程序
_MB_COMPOSITE=@0x2/*_MB_COMPOSITE*/
_MB_DEFAULT_DESKTOP_ONLY=@0x20000/*_MB_DEFAULT_DESKTOP_ONLY*/
_MB_DEFBUTTON1=@0x0/*_MB_DEFBUTTON1*/
_MB_DEFBUTTON2=@0x100/*_MB_DEFBUTTON2*/
_MB_DEFBUTTON3=@0x200/*_MB_DEFBUTTON3*/
_MB_DEFMASK=@0xF00/*_MB_DEFMASK*/
_MB_ICONASTERISK=@0x40/*_MB_ICONASTERISK*/
_MB_ICONEXCLAMATION=@0x30/*_MB_ICONEXCLAMATION*/
_MB_ICONHAND=@0x10/*_MB_ICONHAND*/
_MB_ICONINFORMATION=@0x40/*_MB_ICONINFORMATION*/
_MB_ICONMASK=@0xF0/*_MB_ICONMASK*/
_MB_ICONQUESTION=@0x20/*_MB_ICONQUESTION*/
_MB_ICONSTOP=@0x10/*_MB_ICONSTOP*/
_MB_MISCMASK=@0xC000/*_MB_MISCMASK*/
_MB_MODEMASK=@0x3000/*_MB_MODEMASK*/
_MB_NOFOCUS=@0x8000/*_MB_NOFOCUS*/
_MB_PRECOMPOSED=@0x1/*_MB_PRECOMPOSED*/
_MB_SETFOREGROUND=@0x10000/*_MB_SETFOREGROUND*/
_MB_SYSTEMMODAL=@0x1000/*_MB_SYSTEMMODAL*///系统模式,必须结束对话框后,才能做其他操作
_MB_TASKMODAL=@0x2000/*_MB_TASKMODAL*/
_MB_TYPEMASK=@0xF/*_MB_TYPEMASK*///任务模式,在未结束对话框前也能切换到另一应用程序
_MB_USEGLYPHCHARS=@0x4/*_MB_USEGLYPHCHARS*/
win-窗口库构造源码
var messageBox = u.api( "MessageBoxA", " int ( int hWnd, string lpText,string lpCaption ,INT uType )" )
var messageBoxTimeout = u.api("MessageBoxTimeoutA","int(int hwnd,string lpText,string lpCaption,int uType,int wlange,int dwTimeout)","stdcall") ;
msgbox = function(str,title = "AAuto" ,style ,parenthwnd=0 ){
style := 0x40 // _MB_OK|_MB_ICONINFORMATION;
if(!parenthwnd)
style |= 0x2000/*_MB_TASKMODAL*/
return messageBox( parenthwnd,tostring( str ) ,title,style );
}
msgboxTest = function(str,title ,parenthwnd=0){
return msgbox(str,title,0x1 | 0x20 /*_MB_OKCANCEL|_MB_ICONQUESTION*/ ,parenthwnd ) == 1;
}
msgboxTimeout = function(str,title = "AAuto" ,timeout =2000,style ,parenthwnd=0 ){
style := 0x40 // _MB_OK|_MB_ICONINFORMATION;
if(!parenthwnd)
style |= 0x2000/*_MB_TASKMODAL*/
return messageBoxTimeout( parenthwnd,tostring( str ) ,title,style,0,timeout );
}
函数原型及参数
var messageBox = u.api( "MessageBoxA", " int ( int hWnd, string lpText,string lpCaption ,INT uType )" )
hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口的子窗口。
lpText:欲显示的信息字符串。
lpCaption:对话框标题字符串。
uType:对话框类型常量。
该函数的返回值为整数,用于对话框按钮的识别。
import win.ui;
/*DSG{{*/
var winform = win.form(parent=...; text="AAuto Form";right=349;bottom=249 )
winform.add( )
/*}}*/
//win.msgbox( winform.button.text );
res=win.msgboxTest("询问用户的信息","标题")
if( res=1 ){ //选择确定
win.msgbox("OK","AAuto")
}
else{ win.msgbox("NO","AAuto")
/*不符合条件时执行的代码块*/
}
return ;
winform.show()
win.loopMessage();
|
调用及参数说明如下:
MessageBox hWnd, lpText, lpCaption, dwType
参数 | 类型 | 说明 |
hWnd | DWORD | 标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。 |
lpText | LPDWORD | 指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。 |
lpCaption | LPDWORD | 指向一个以NULL结尾的、用于对话框标题的字符串的指针。 |
dwType | DWORD | 指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。 |
指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。 |
MB_ABORTRETRYIGNORE | 消息框有三个按钮:终止,重试和忽略 |
MB_CANCELTRYCONTINUE | 消息框有三个按钮:取消,再次重试和续继.(XP以后的版本) |
MB_OK | 消息框含有一个按钮:OK。这是缺省值。 |
MB_OKCANCEL | 消息框上显示两个按钮,“确定”和“取消” |
MB_RETRYCANCEL | 消息框上显示两个按钮,‘重试’和‘忽略’ |
MB_YESNO | 消息框上显示两个按钮,‘是’和‘否’ |
MB_YESNOCANCEL | 消息框上显示三个按钮,‘是’、‘否’和‘取消’ |
MB_HELP | 消息框有显示两个按钮,“确定”和“帮助”,“帮助”按下后发送WM_HELP消息到拥有该弹出框的窗口 |
指定下列标志中的一个来显示消息框中的图标:标志的含义如下。 |
MB_ICONEXCLAMATION | 显示惊叹号图标 |
MB_ICONWARNING | 显示惊叹号图标 |
MB_ICONINFORMATION | 显示消息图标 |
MB_ICONASTERISK | 显示危险图标 |
MB_ICONQUESTION | 显示问号图标 |
MB_ICONSTOP | 显示停止图标 |
MB_ICONERROR | 显示错误图标 |
MB_ICONHAND | 显示错误图标 |
指定下列标志中的一个来显不缺省的按钮:标志的含义如下。 |
MB_DEFBUTTON1 | 第一个按钮为缺省按钮。如果MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4没有被指定,则MB_DEFBUTTON1为缺省值。 |
MB_DEFBUTTON2 | 第二个按钮为缺省按钮。 |
MB_DEFBUTTON3 | 第三个按钮为缺省按钮。 |
MB_DEFBUTTON4 | 第四个按钮为缺省按钮。 |
指定下列标志中的一个来显示对话框的形态:标志的含义如下. |
MB_APPLMODAL | 在hwnd参数标识的窗口中继续工作以前,用户一定响应消息框。但是,用户可以移动到其他线程的窗口且在这些窗口中工作。根据应用程序中窗口的层次机构,用户 可以移动到线程内的其他窗口。所有母消息框的子窗口自动地失效,但是弹出窗口不是这样。如果既没有指定MB_SYSTEMMODAL也没有指定MB_TASKMOOAL,则MB_APPLMODAL为缺省的。 |
MB_SYSTEMMODAL | 除了消息框有WS_EX_TOPMOST类型,MB_APPLMODAL和WS_EX_TOPMOST一样。用系统模态消息框来改变各种各样的用户,主要的损坏错误需要立即注意(例如,内存溢出)。如果不是那些与hwnd联系的窗口,此标志对用户对窗口的相互联系没有影响。 |
MB_TASKMODAL | 如果参数hwnd为NULL,除了所有属于当前线程高层次的窗口是失效的,MB_TASKMODALL和MB_APPLMODAL一样。当调用应用程序或库没有一个可以得到的窗口句柄时,使用此标志。但仍需要阻止到调用应用程序 由其他窗口的输入而不是搁置其他线程。 |
其它一些附加的属性,可以指定下列一个或更多选项 |
MB_DEFAULT_DESKTOP_ONLY | 去掉XP美化效果(xp以后版本) |
MB_RIGHT | 对话框标题靠右 |
MB_RTLREADING | 对话框标题及消息文本丛右到左 |
MB_SETFOREGROUND | 消息框变为前景窗口。在内部系统为消息个调用SetForegrundWindow函数 |
MB_TOPMOSI | 消息框用WS_EX_TOPMOST窗口类型来创建 |
MB_SERVICE_NOTIFICATION | Windows NT 4.0以上版本调用程序是一个通知事件的用户的服务程序。函数在当前活动桌面上显示一个消息框,即使没有用户登记到计算机 |
MB_SERVICE_NOTIFICATION_NT3X | Windows NT 4.0以下版本调用程序是一个通知事件的用户的服务程序。函数在当前活动桌面上显示一个消息框,即使没有用户登记到计算机 |
返回值如下:
如果没有足够的内存来创建消息框,则返回值为零。如果函数调用成功,则返回值为下列对话框返回的菜单项目值中的一个: |
IDABORT | Abort(终止) 按钮被选中 |
IDOK | OK(确定) 按钮被选中 |
IDCANCEL | Cancel(取消) 按钮被选中 |
IDYES | YES(是) 按钮被选中 |
IDNO | NO(否) 按钮被选中 |
IDRETRY | RETRY(重试)按钮被选中 |
IDIGNORE | Ignore(忽略)按钮被选中 |
IDCONTINUE | Continue(续继) 按钮被选中 |
IDTRYAGAIN | Try Again (再次重试) 按钮被选中 |
如果一个消息框有一个Cancel按钮,且如果Esc键被按下或Cancel键被选择,则函数返回IDCANCEL值。如果消息框没有Cancel按钮,则按Esc键没有作用。更多错误信息请调用GetLastError |
备注:
1、所在DLL库:User32