findwindow获取托盘区图标程序的句柄_自己的程序和Femap软件的交互方式

如果不使用Femap自带的API程序窗口,根据API帮助文档的介绍,程序和Femap软件之间可以有四种交互形式,分别是:

1)程序和Femap是两个独立的应用;

2)将Femap作为一个隐藏的服务器;

3)将自己写的程序作为一个插件嵌入到Femap软件中;

4)将Femap软件嵌入到自己编写的程序中。

下面对这四种方式进行简单介绍。

一、作为两个独立应用运行(Running as two separate applications)

这是最简单的交互方法,因为FEMAP和您自己的应用程序都不需要真正了解其他应用程序的用户界面,所以不需要额外的设置。只需启动应用程序,然后“get”或“create”上述的FEMAP对象。如果使用GetObject附加到正在运行的会话,则无需再做其他操作。如果使用CreateObject,程序将启动一个新的FEMAP会话,但FEMAP将不可见。要使您的FEMAP会话可见,在调用createObject之后,您必须调用“feAppVisible”。无论是GetObject还是CreateObject,具体代码可以看我前面的文章。

二、把Femap软件作为一个隐藏服务器运行(Running FEMAP as a hidden server)

如果您希望您的应用程序是用户唯一可见的用户界面,那么这个过程非常类似于作为两个独立的应用程序运行。但是,在本例中,您永远不会希望使用GetObject附加到现有的FEMAP—您将使用CreateObject来创建一个新的、隐藏的FEMAP对象。简单的使用方法:

Dim App as Object

Set App = CreateObject(“femap.model”)

此时将启动一个新的FEMAP会话,通过这个API,您可以访问任何可用的功能。您必须开发自己的用户界面来向用户展示您想要的功能,然后调用FEMAP API函数来实现该功能。

在这种模式下运行FEMAP时,通常不希望调用大量的用于用户数据输入的对话框API,但是如果您一定要调用函数去显示出对话框,可以使用“DialogAutoAnswer”变量进行设置,即使Femap处于隐藏状态对话框也能在屏幕上显示出来,尽管对话框出现在屏幕上的位置可能是随机的。

三、将您的程序作为Femap的一个插件(Running your application as a FEMAP add-in)

如果你想让你的应用程序成为一个FEMAP“插件”,那么你需要遵循几个额外的步骤。在这种情况下,用户可见的整体界面将是FEMAP。您的应用程序将成为该接口的一部分。您可能希望将您自己的应用程序的主窗口作为Femap的一个对话框来构建。

首先,按照上面描述的步骤作为两个独立的、可见的应用程序运行。即调用GetObject或CreateObject附加到FEMAP,如果创建了一个新的FEMAP会话,则调用feAppVisible。最后,您将希望调用feAppRegisterAddInPane(),详细的参数可查看Help。在这个调用中,您将指定句柄给您自己的应用程序窗体,以及在FEMAP用户界面中您希望将其放置的位置。在这个调用中,您将指定应用程序窗口的句柄,以及在FEMAP用户界面中您希望将其放置的位置。

例如这种,“插件”应用程序被添加到FEMAP用户界面左上角的一个窗格中:

Help中给出的代码如下:

rc=App.feAppRegisterAddInPane(True, Form1.DefInstance.Handle.ToInt32, 0, False, False, 3, 2)

但是上述的代码对于VBA来说是不适用的,主要问题是VBA不能直接获取窗体的句柄,VBA获取窗体句柄的方法可自行百度。VBA可用的代码如下(注意,您需要引用Femap类库,具体方法可以参考我前面的文章):

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Dim app As femap.Model

Private Sub CommandButton1_Click()

Set app = CreateObject("femap.model")

app.feAppVisible (True)

Dim rc As Integer

rc = app.feAppRegisterAddInPane(True, FindWindow(vbNullString, "UserForm1"), 0, False, False, 3, 2)

End Sub

点击“Start”按钮后窗体就会嵌入到Femap程序中。

如果你已经将你的应用程序注册为一个FEMAP插件,记得在它退出之前再次调用“feAppRegisterAdd­InPane”来“注销”你的应用程序。

5f540920a3955e835dbfeb1e892d8e19.png

四、将Femap软件嵌入到您自己的程序中

除了将应用程序嵌入到FEMAP用户界面中,您可能还希望将部分FEMAP嵌入到您的界面中。要做到这一点,需要嵌入整个FEMAP窗口,然后可以选择性地关闭/隐藏用户界面的各个部分,直到只剩下您想要的部分。最有用的功能可能是FEMAP图形窗口可以直接嵌入到您的某个窗口中。这可以为您提供FEMAP的所有图形功能,而无需您自己重新实现它们,并且只需一个非常简单的设置。

同样,您将使用GetObject或CreateObject连接到FEMAP会话。在大多数情况下,您通常使用CreateObject,并让创建的FEMAP会话可以嵌入到您的应用程序中。要将FEMAP窗口嵌入到应用程序中,只需调用feAppEmbed()方法。和上部分一样,注意窗体句柄的获取问题,Help中给出的例子是不适用的,需做同样的修改。

Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Dim app As femap.Model

Private Sub CommandButton2_Click()

Dim rc As Long

Set App = CreateObject("femap.model")

rc = App.feAppEmbed(FindWindow(vbNullString, "UserForm1"), 250, 0, 1300, 900)

End Sub

或者,通过更多的调用,您可以关闭FEMAP界面的各个部分,只留下图形窗口。例如:

rc = femap.feAppManageToolbars("", False)

rc = femap.feAppManageStatusBar(False)

rc = femap.feAppManagePanes("", 0)

rc = femap.feAppManageGraphicsTabs(False)

rc = femap.feAppEmbed(Me.Handle, 120, 10, 660, 420)

注意,如果希望在此模式下运行,则无需调用feAppVisible(),因为调用feAppEmbed()将自动使窗口可见,而首先调用feAppVisible()只会导致不必要的窗口闪烁。

63c4afd3652df0dae0ce0787bb9786df.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值