首页 理论教育 AbaqusGUI工具包用户手册:目标/消息功能

AbaqusGUI工具包用户手册:目标/消息功能

时间:2023-10-17 理论教育 版权反馈
【摘要】:Abaqus GUI工具包采用一个目标/消息系统来实现在GUI进程中的通信。例如,目标/消息系统相比之Motif的回调机制。当一个窗口部件要求它的目标更新它的状态时,就发送了SEL_UPDATE消息。更多的信息见6.5.5节。当收到目标类型和ID的消息时,通过指定调用哪一个方法来在映射中添加一个入口,如图6-2所示。图6-2 目标和消息消息映射是通过使用FXMAPFUNC功能来定义的。对象使用消息处理器对消息做出反应。作为GUI中的一些交互的结果,消息通常是通过GUI基础构件发送的。

AbaqusGUI工具包用户手册:目标/消息功能

Abaqus GUI工具包采用一个目标/消息系统来实现在GUI进程中的通信。例如,目标/消息系统相比之Motif的回调机制。所有的窗口部件可以发送消息并且从任何其他窗口部件接收消息。一个消息由以下两个组件组成:

●一个消息类型(type)。

●一个消息身份(ID)。

消息类型描述发生什么类型的事件,如单击按钮。消息ID识别消息的发送者。

Abaqus GUI工具包的大部分窗口部件采用指定它们的目标和它们的ID的参数。即使一个窗口部件没有采用一个目标和ID作为参数,也可以使用setTarget和setSelector方法来设置这些属性。例如:

978-7-111-57759-1-Part04-6.jpg

窗口部件能发送几种形式的消息。两种最常用的消息类型是SEL_COMMAND和SEL_UPDATE。SEL_COMMAND类型消息通常说明窗口部件是“已发的”,如用户单击了一个按钮。当一个窗口部件要求它的目标更新它的状态时,就发送了SEL_UPDATE消息。更多的信息见6.5.5节。

使用目标类中定义的映射来将一个消息路由到消息处理器。当收到目标类型和ID的消息时,通过指定调用哪一个方法来在映射中添加一个入口,如图6-2所示。

978-7-111-57759-1-Part04-7.jpg

6-2 目标和消息

消息映射是通过使用FXMAPFUNC功能来定义的。此宏具有以下4个参数:自身(self)、消息类型(message type)、消息身份(message ID)和消息名(method name)。方法名必须通过类名认证:className.methodName。当收到的信息的类型和身份与在FXMAP-FUNC入口中定义的类型和身份相匹配时,将调用相应的方法。如果想要在消息映射中定义大范围的ID,则可以使用FXMAPFUNCS功能,它具有一个额外的参数:自身(self)、消息类型(message type)、开始消息身份(start message ID)、结束消息身份(endmessage ID)和消息名(method name)。

对象使用消息处理器对消息做出反应。所有的消息处理器具有相同的原型,包含下面的内容:(www.xing528.com)

●消息的发送者。

●消息选择器。

●一些“用户数据”。

可以使用SELTYPE和SELID功能从选择器抽取消息的类型和ID。

下面的代码显示了消息映射、消息ID和消息处理器如何一起工作:

978-7-111-57759-1-Part04-8.jpg

上面的例子在开始时生成一个在派生类中使用的ID列表。因为一个窗口部件具有一个特定的目标,窗口部件的ID未必全局唯一,只有在目标类和基础类中才需要唯一。为了自动处理此编号,约定是在每一个类中定义ID_LAST。一个派生类应该使用它的基础类中定义的ID_LAST值来起始它的编号。此外,派生类应当定义它自己的ID_LAST作为派生类中最后的ID。一个从派生类派生出来的类将可以利用ID来开始它的编号。任何窗口部件不能使用ID_LAST。ID_LAST的唯一目的是在类之间提供一个自动的编号。

上例通过使用FXMAPFUNC功能添加项目来构建一个消息而继续。在该例子中,当收到类型SEL_COMMAND的消息和一个ID_1或者ID_2的ID时,脚本调用onCmdPrintMsg方法。

两个按钮窗口部件将它们的目标设置成自身(MyClass)。当每一个窗口部件发送一个消息时,窗口部件发送一个不同的消息ID,并且消息处理器检查ID来确定谁发送了消息。如果用户单击了第一个按钮,则按钮发送了一个(ID_1,SEL_COMMAND)消息给MyClass。类的消息映射路由哪个消息到onCmdPrintMsg方法。onCmdPrintMsg方法检查正传入消息的ID并且打印Button1waspressed。

消息处理器返回正确的值来确认GUI保持最新是重要的。在消息处理器中返回一个1告诉工具包已经处理过消息了。反过来,如果处理了一个消息,则工具包默认一些要求最新的事情已经发生了变化,进而工具包发起一个GUI更新进程。在消息处理器中返回一个0告诉工具包此消息还没进行处理,这样工具包并不发起一个GUI更新进程。

作为GUI中的一些交互的结果,消息通常是通过GUI基础构件发送的。可以通过调用它的handle方法向一个对象直接发送一个消息。Handle方法具有以下3个参数:sender、selector和userData。发送器通常是发送消息的对象。选择器由消息ID和消息类型组成。可以使用MKUINT功能来创建一个选择器,如MKUINT(ID_1,SEL_COMMAND)。用户数据必须是None,因为在Abaqus GUI工具包中不支持此特征。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈