一个dll文件就是一个函数库,包含若干个函数。
调用dll文件时,必须明确函数的调用协议,包括函数的名称、参数的数目、参数的类型、返回值的类型。
1)windows函数库主要的几个文件。
l gdi32.dll:
屏幕显示及打印功能的函数集
l user32.dll:
鼠标、键盘、通信端口、声音、时钟功能的函数集
l kernel32.dll:
文件及内存管理<核心部分)功能的函数集
l mpr.dll:
windows32网络接口库
l advapi32.dll:
windows32、advapi32核心部件
2)dll文件的载入过程。
与调用外部函数相似,dll函数集在使用之前必须事先载入和声明,其载入的过程要比调用ucd函数更加复杂。
以装载“window\system\shell32.dll”文件为例,具体的载入过程介绍如下。
单击工具栏上的【函数】按钮,打开“函数”面板,在“种类”下拉列表中选择当前的文件“关于.a7p”。
单击【加载】按钮,出现“加载函数”对话框,选择“c:
\window\system\shell32.dll”文件,单击【打开】按钮,出现如图4-3所示的函数设置对话框,具体的选项如下。
functionname:
输入要调用的函数的名称,这里是“shellabouta”.
arguments:
指明要用到的参数类型,这里是“long,string,string,long”。
return:
函数返回值的类型,这里是“long”。
description:
函数的语法。
图4-3 载入dll函数设置对话框
单击图4-3中的【load】按钮装载函数,如果装载成功,则在对话框中显示“successfullyloaded"shellabouta(>"”。
装载完毕后,单击图4-3中的【done】按钮,被成功装载的函数就会出现在函数框中。
4.1.5 调用window标准的“关于”窗口
要调用window标准的“关于”窗口主要利用shell32.dll文件中的“shellabouta(>”函数实现。
1)“shellabouta(>”函数的使用格式。
shellabouta(hwnd,szapp,szotherstuff,hicon>
hwnd:
设置窗口的句柄。
szapp:
设置窗口的标题。
szotherstuff:
在版权说明和使用权之间的空白处增加额外的说明。
hiocn:
一般取0。
2)新建一个文件,名为“关于.a7p”,装载函数“shellabouta(>”,其过程与上面是一样的,这里不再介绍。
3)装载函数成功后,在流程线上放一计算图标,在其中输入如下内容:
szapp="authorware7.0使用及技巧精解"
szotherstuff="欢迎您使用authorware7.0
使用及技巧精解!
"
shellabouta(windowhandle,szapp,szotherstuff,0>
其中szapp,szotherstuff是两个自定义变量
4)保存并运行程序。
4.1.6 如何制作最小化、最大化、关闭窗口
按钮和拖动窗口
在用authorware制作多媒体作品时,我们希望展示窗口和普通窗口一样可以最小化、关闭、拖动。
要实现这一目的,最简单的方法是在设置文件属性时,保留标题栏,但这样会影响作品的美观。
如何制作自己的标题栏,使之和整个作品搭配协调,并且可以实现标题栏的功能呢?
使用windowsapi函数而不通过单击窗口的控制图标来控制authorware的运行窗口,它可以使你的authorware程序在没有标题栏的情况下自由控制窗口的显示状态,这对于编制精美的多媒体程序是很有帮助的。
你可以找一个你认为满意的窗口把它截取下来,用photoshop修改成你满意的样子,保存为作品的背景。
再制作最小化和关闭的按钮图形以备用。
1)新建文件
在authorware中新建一个文件。
单击【修改】→【文件】→【属性】菜单,在弹出的“文件属性”对话框中选择“回放”标签,将“大小”项设定为“根据变量”,取消“标题栏”和“菜单栏”的复选框前的对勾。
2)窗口设置
拖一个显示图标到流程线上,命名为“背景”。
将制作好的背景图片导入,再拖一个计算图标到流程线上,命名为“窗口大小”,双击,在其中输入程序:
resizewindow(400,280>
movewindow(100,100>
第一句的作用是将窗口大小设置成合适大小<以背景图片的大小为准)。
第二句的作用是将窗口移动到屏幕的合适位置。
3)最小化、最大化及关闭功能
在流程线上放置一个交互图标,命名为“窗口控制”。
在其右侧放置三个计算图标,响应类型都设为“按钮响应”,分别命名为“最小化”、“最大化”、“关闭”。
在它们的分支属性对话框“响应范围”项中复选“永久”,“分支”项选择“返回”。
如你认为需要,可编辑这三个响应的按钮样式,用制作好的图片代替默认的样式并调整其位置。
在“最小化”图标中输入程序:
showwindowasync(windowhandle,6)
在“最大化”图标中输入程序:
showwindowasync(windowhandle,3)
这里调用windowsapi函数showwindowasync实现将窗口最小化、最大化。
保存时,系统会弹出对话框,提示选择此函数的来源,选择winapi.u32。
authorware6以前的版本是加载api函数showwindow,现在如还加载它则会出现于aw内部函数showwindow同名而无法加载的情况,从而无法完成“使窗口最小化”等任务。
现在加载api函数showwindowasync,该函数可以替代showwindow原有的功能。
格式为:
showwindowasync(hwndhwnd,intncmdshow>
其中:
hwndhwnd 设置窗口的句柄,一般为windowhandle
ncmdshow:
定义如何显示启动程序的常数值,即程序启动后的窗口形式,取值如下。
0——隐藏窗口,活动状态给令一个窗口。
1或9——用原来的大小和位置显示一个窗口,同时令其进入活动状态。
2——最小化窗口,并将其激活。
3——最大化窗口,并将其激活。
4——用最近的大小和位置显示一个窗口,同时不改变活动窗口。
5——用当前的大小和位置显示一个窗口,同时令其进入活动状态。
6——最小化窗口,活动状态给令一个窗口。
7——最小化一个窗口,同时不改变活动窗口。
8——用当前的大小和位置显示一个窗口,不改变活动窗口。
在“退出”图标中输入程序:
quit(>
作用是退出本程序。
4)窗口移动功能
在这里我们要实现当用户拖动自定义标题栏时,窗口随之移动的功能。
在交互图标“窗口控制”右侧放置一个“组群”图标,响应类型为“热区响应”,命名为“移动窗口”,在分支属性对话框中“响应范围”项复选“永久”,“分支”项选择“返回”。
设定其响应范围包围背景的上部分,这就是我们的标题栏范围。
双击“移动窗口”图标,在其中放置一个“交互”图标,命名为“movewindow”。
在此交互图标右侧放置一个“计算”图标和一个群组图标,响应类型都为“条件响应”,响应条件分别为mousedown和~mousedown。
设置mousedown图标分支的属性,“自动”为“为真”,“分支”为“重试”。
设置~mousedown图标分支的属性,“自动”为“为真”,“分支”为“退出交互”。
在mousedown计算图标中输入程序:
releasecapture(>
sendmessage(windowhandle,161,2,0>
这里同样是调用windowsapi函数实现窗口可拖动的功能。
当系统提示选择这两个函数的来源时,选择winapi.u32。
~mousedown群组图标内为空。
整个程序就完成了,最后的流程如图4-4所示。
我们看一下最后的效果。
单击“最小化”按钮可将窗口最小化到任务栏,在任务栏上单击可恢复;单击“关闭”按钮可退出本程序;拖动自定义的标题栏可移动窗口的位置,达到了预期的效果。
图4-4 窗口属性流程图
这个程序中你可以再设一个按钮,命名为“还原”,在其计算图标中输入:
showwindowasync(windowhandle,1)
设一个与最大化正好相反的激活条件和非激活时隐藏按钮,最大化按钮也要同样设置。
并把“最大化”和“还原”按钮重叠放置。
4.1.7 用winapi.u32制作消息框
在authorware制作消息框可以利用其提供的winapi.u32中的messagebox函数,其格式为:
messagebox(hwndhwnd,lpcstrlptext,lpcstrlpcaption,uintutype>。
用它可以做出标准的windows消息框。
一、方法一
首先,新建一个要求用户注册的authorware7文件,然后加载winapi.u32中的messagebox函数。
然后,在流程线上放置一个名为“消息”的计算图标,在其中输入如下内容:
hh:
=messagebox(windowhandle,"密码错误,请输入正确的注册码!
","提醒",72)。
hh是一个自定义变量,用于判断用户按了哪个按钮,以便执行下一个流程。
至于它的返回值,将在下边一并列出。
接着,在“消息”计算图标下再放置一个“判断”计算图标,在其中输入以下内容:
ifhh=2then
quit(>
else
goto(iconid@"跳转到注册码输入">
endif
内容仅作为参考,大家可以根据实际情况自行确定输入内容。
好了,现在运行程序看一下,感觉如何?
如果适当修改messagebox函数的“uintutype”参数值,还可以得到五种效果。
具体效果如何,请诸位自己尝试,在此就不一一展示了。
1)uintutype参数值可分为五大类,分别介绍如下。
第一类可取值为:
0、1、2、3、4、5、8、10
第二类可取值为:
16、17、18、19、20、21、24、26<在第一类取值加16)
第三类可取值为:
32、33、34、35、36、37、40、42<在第一类取值加32)
第四类可取值为:
48、49、50、51、52、53、56、58<在第一类取值加48)
第五类可取值为:
64、65、66、67、68、69、72、74<在第一类取值加64)
2)各按钮的返回值介绍如下。
1确定 5忽略
2取消 6是
3终止 7否
4重试
其中,“中断”按钮没有返回值。
二、方法二
首先,我们来看一下打开如何一个计算图标。
在计算图标的快捷工具栏右侧有个“!
”的按钮,作用是“插入提示框”,单击该按钮,会弹出如图4-5所示的设置框。
图4-5 消息框的设置对话框
设置完后,单击“test”按钮看看效果如何?
然后确定。
在计算图标中的当前位置就插入了一条语句,还有各个按钮的返回值。
如:
systemmessagebox(windowhandle,"你真的想退出
吗?
","退出",52)--6=yes,7=no
运行结果如图4-6所示<其中标题栏中的“退出”可在计算图标中修改)。
图4-6 消息框
systemmessagebox是系统函数不需要在winapl.u32中加载。
格式为:
result=systemmessagebox(windowhandle,"text",
"caption"[,typeor#buttons,#icon,default,
#modality]>
参数设置与messagebox类似。
4.1.8 用winapi.u32屏蔽功能键和
隐藏任务栏
1)新建一个文件,文件名为sample.a7p。
2)放置一计算图标于流程线上。
3)按【ctrl+shift+f】快捷键,打开“函数”窗口。
4)选择sample.a7p,单击【加载】钮,打开winapi.us2文件,并引入其中的systemparametersinfo(>、findwindow(>和setwindowpos(>三个函数。
5)双击计算图标,在里面输入如下程序语句:
systemparametersinfo(97,1,1,1>——屏蔽键盘所有功能键。
wnd:
=findwindow(″shell_traywnd″,″″>——捕捉任务栏窗口。
setwindowpos(wnd,0,0,0,0,0,128>——隐藏任务栏窗口。
6)在程序的退出处放置一计算图标,双击计算图标,在里面写上:
l systemparametersinfo(97,0,1,1>——恢复键盘所有功能键。
l wnd:
=findwindow(″shell_traywnd″,″″>——捕捉任务栏窗口。
l setwindowpos我们还可以在运行程序前,通过windows api函数捕捉所有的窗口,获得窗口的句柄,然后再向它们依次发送mw_quit消息,这样就可以在运行程序之前,关闭所有正在运行的程序,从而释放出更多的资源给你的多媒体作品。
4.1.9 用budeky.u32屏蔽功能键
设计程序时,因为某些特殊需要,有时可能需要屏蔽系统的某些功能键,比如【alt+tab】、【alt+f4】、【ctrl+q】等。
本例中就使用budeky.u32中的函数来屏蔽某些功能键,所使用的函数有:
1)disablequit<)
格式:
result:
=disablequit屏蔽用于退出的某些快捷键,比如:
【alt+f4】、【ctrl+q】和【ctrl+.】。
2)disableswitching(>
格式:
disableswitching(>
屏蔽某些功能键及组合,比如【alt+tab】、【alt+esc】、【ctrl+esc】、【ctrl+alt+delete】和窗口键。
3)restorequit
格式:
restorequit(>
解除restorequit<)函数屏蔽的功能键。
4)restoreswitching(>
格式:
restoreswitching(>
解除restoreswitching(>函数屏蔽的功能键。
具体步骤如下。
1)新建一个文件,保存为“屏蔽功能键.a7p”,文件流程如图4-7所示。
图4-7 屏蔽功能键流程图
在“初始化”图标中输入以下内容。
resizewindow(300,200> --设置窗口大小
setwindowtext(windowhandle,"屏蔽功能键">
设置演示窗口标题栏的名称为“屏蔽功能键”
2)打开交互图标,输入图4-8所示的内容,调整好按钮的相对位置。
图4-8 交互图标中的显示对象
3)在“屏蔽功能键”按钮交互分支下的计算图标中输入以下内容:
disableswitching(>
hint:
="\"alt+tab\"、\"alt+esc\"、\"ctrl+esc\"、
\"ctrl+alt+delete\"和\"窗口键\"已被屏蔽"
systemmessagebox(windowhandle,hint,"屏蔽功能
键",48>--1=ok
屏蔽功能键,然后显示提示信息。
技巧:
因字符串需要加双引号,而在提示信息中因为也有双引号,所以必须在内部每个双引号前加转意字符“\”。
第一个和最后一个双引号当然是不能加的。
4)在“屏蔽退出键”按钮交互分支下的计算图标中输入以下内容:
disablequit(windowhandle>
hint:
="\"alt+f4\"、\"ctrl+q\"和\"ctrl+.\"已被屏蔽"
systemmessagebox(windowhandle,hint,,"屏蔽退出
键",48>--1=ok
屏蔽退出键,然后显示提示信息。
5)在“解除屏蔽”按钮交互分支下的计算图标中输入以下内容:
--解除各键的屏蔽!
restorequit(>
restoreswitching(>
hint:
="各键已经解除屏蔽!
"
systemmessagebox(windowhandle,hint,"解除屏蔽",
48>--1=ok
解除各键的屏蔽,然后显示提示信息。
6)在“退出”按钮交互分支下的计算图标中输入以下内容:
--退出程序前解除屏蔽
restoreswitching(>
restorequit(>
quit(>
防止用户未单击“解除屏蔽”按钮解除对各键的屏蔽,在退出程序前执行解除屏蔽函数保证程序退出后各键均解除屏蔽。
7)运行程序,标题栏发生了变化。
单击“屏蔽功能键”按钮出现如图4-9所示的信息。
图4-9 屏蔽功能键消息框
4.1.10 如何设置你的演示窗口的位置总在
最前,即不被其他窗口覆盖
在有些时候,我们用authorware做的程序希望演示窗口的位置总在最前,即不要被其他窗口覆盖。
比如我们在程序中调用了word,在进行word编辑的同时authorware的主程序的小窗口仍然在前。
我们就要用到winapi.us2中的setwindowpos(>函数。
setwindowpos:
这个函数能为窗口指定一个新位置和状态。
它也可改变窗口在内部窗口列表中的位置。
函数格式:
setwindowpos(hwndhwnd,hwndhwndinsertafter,intx,inty,intcx,intcy,uintuflags>
其中的参数意义如下。
hwnd:
欲设置的窗口的句柄。
hwndinsertafter:
窗口句柄。
在窗口列表中,欲设置的窗口hwnd会置于这个窗口句柄的后面。
这个参数也可能取下面的值:
1——将窗口置于窗口列表底部。
0——将窗口置于z序列的顶部;z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序。
-1——将窗口置于列表顶部,并位于任何最顶部窗口的前面<将一个窗口置顶,不会被任何窗口遮挡)。
-2——将窗口置于列表顶部,并位于任何最顶部窗口的后面。
x:
窗口新的x坐标。
y:
窗口新的y坐标。
cx:
新的窗口宽度。
cy:
新的窗口高度。
wflags取值如下:
1——保持当前大小2——保持当前位置4——保持窗口在列表的当前位置8——窗口不自动重画。
10——不激活窗口。
32——围绕窗口画一个框<强迫一条wm_nccalcsize消息进入窗口,即使窗口的大小没有改变)。
64——显示窗口。
128——隐藏窗口。
例如:
setwindowpos(windowhandle,-1,0,0,0,0,3>,取3时cx、cy、x和y设定都将被忽略。
4.1.11 用altools.u32函数动态改变屏幕
分辨率,让课件实现全屏播放
一个外挂函数——altools.u32,这里面有改变分辨率和隐藏任务栏的函数。
通过程序来改变分辨率和隐藏任务栏而实行全屏演示。
不过还要在程序退出的时候改回原来的分辨率。
下面我们就来看一看具体实现的办法。
一、加载函数
打开authorware,保存文件为“改变屏幕分辨率.a7p”。
按【ctrl+shift+f】快捷键打开函数框,在“分类”里面选择“改变屏幕分辨率.a7p”,单击【加载】按钮,选择altools.u32,加载里面的“alchangeres”函数,用同样方法,再加载“alhidetaskbar”、“alshowtaskbar”两个函数。
先说明一下这三个函数的作用