Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4741170
  • 博文数量: 206
  • 博客积分: 5240
  • 博客等级: 大校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-12 21:40
文章分类

全部博文(206)

文章存档

2013年(13)

2012年(8)

2011年(33)

2010年(152)

我的朋友

分类:

2010-10-20 15:42:47

参考:
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


参数类型说明
hWndDWORD标识将被创建的消息框的拥有窗口。如果此参数为NULL,则消息框没有拥有窗口。
lpTextLPDWORD指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。
lpCaptionLPDWORD指向一个以NULL结尾的、用于对话框标题的字符串的指针。
dwTypeDWORD指定一个决定对话框的内容和行为的位标志集。此参数可以为下列标志组中标志的组合。
指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。
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_NOTIFICATIONWindows NT 4.0以上版本调用程序是一个通知事件的用户的服务程序。函数在当前活动桌面上显示一个消息框,即使没有用户登记到计算机
MB_SERVICE_NOTIFICATION_NT3XWindows NT 4.0以下版本调用程序是一个通知事件的用户的服务程序。函数在当前活动桌面上显示一个消息框,即使没有用户登记到计算机

返回值如下:

如果没有足够的内存来创建消息框,则返回值为零。如果函数调用成功,则返回值为下列对话框返回的菜单项目值中的一个:
IDABORTAbort(终止) 按钮被选中
IDOKOK(确定) 按钮被选中
IDCANCELCancel(取消) 按钮被选中
IDYESYES(是) 按钮被选中
IDNONO(否) 按钮被选中
IDRETRYRETRY(重试)按钮被选中
IDIGNOREIgnore(忽略)按钮被选中
IDCONTINUEContinue(续继) 按钮被选中
IDTRYAGAINTry Again (再次重试) 按钮被选中
如果一个消息框有一个Cancel按钮,且如果Esc键被按下或Cancel键被选择,则函数返回IDCANCEL值。如果消息框没有Cancel按钮,则按Esc键没有作用。更多错误信息请调用GetLastError


备注:
1、所在DLL库:User32  







阅读(8629) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~