【问题标题】:WPF windows is hidden when call win32调用win32时WPF窗口隐藏
【发布时间】:2014-05-06 13:02:39
【问题描述】:

我有一个 win32 应用程序(用 Delphi 编写),它调用一些 WPF 窗口。 这些 WPF 窗口调用 win32 Delphi 项目中的其他窗口(以重用某些代码)。当我这样做时,它会隐藏(发送到后台)WPF 窗口。

这些 win32 窗口位于 COM dll 中。

有办法避免这种行为吗?

我需要这样的东西:

+--------------------------------------------------
|  win32
|
|
|
|  +-------------------------------------+
|  |  wpf                                |
|  |                                     |
|  |                                     |
|  |                                     |
|  |  +--------------------+             |
|  |  |  win32             |             |
|  +--|                    |-------------+
|     |                    |             
|     +--------------------+             
|                                       
|  

但我明白了:

+--------------------------------------------------
|  win32
|
|
|
|  
|  
|  
|  
|  
|     +--------------------+             
|     |  win32             |             
|     |                    |             
|     |                    |             
|     +--------------------+             
|                                       
|  

在 delphi 主项目中,我使用“CreateOleObject”来访问 wpf 代码。 在 WPF 中,使用“ShowDialog()”命令打开窗口。 同样,在 WPF 中,我调用 delphi,使用对我的 win32 dll 的互操作引用。

好的,使用的代码如下:

Delphi 主应用:

var dll : OleVariant;
begin
  dll := CreateOleObject("MyDllinCSharp.ClassName");
  dll.DoSomething(...);

此时,wpf windows 来到了前面:

wpf 代码:

var form = new MyForm();
form.ShowDialog();

在 xaml 中,没什么重要的,只有一个基本的窗口:

<Window x:Class="MyForm"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Reverter" Height="432" Width="500" WindowStartupLocation="CenterScreen">

现在在c#中,我将在c#项目中引用COM dll后调用一个delphi DLL:

var dll = Delphi.CreateInstance("delphidll", "Interfacename") as IMyProcess;

dll.DoSomethingInDelphi(....);

【问题讨论】:

  • 没有更多细节很难提供帮助
  • 你能用非常简单的 Delphi -> WPF -> Delphi 代码 sn-p 复制该行为吗?
  • 好的,我已经更新了。
  • 代码当然很重要。请添加 SSCCE。
  • 不能提供代码是什么意思。想象一下,如果你告诉编译器你不能提供代码。显然你可以提供代码。在我看来,你好像还不够努力。

标签: c# wpf delphi winapi


【解决方案1】:

我得到了这个工作,在 WPF 元素中托管 Win32 窗口,就像这个演练:

http://msdn.microsoft.com/en-us/library/ms752055.aspx

现在我有这样的东西:

+--------------------------------------------------
|  win32
|
|
|
|  +-------------------------------------+
|  |  wpf                                |
|  |                                     |
|  |                                     |
|  |  -wpf------------------             |
|  | |+--------------------+|            |
|  | ||  win32             ||            |
|  +-||                    ||------------+
|    ||                    ||             
|    |+--------------------+|             
|     ----------------------                                   
|  

【讨论】:

    猜你喜欢
    • 2011-10-05
    • 2010-10-11
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多