在MFC程序中显示WPF窗口

    最近想要在原有系统(基于MFC,非托管)中加入WPF的界面。搜索了一段时间,发现大部分文章都是在谈托管程序C++中调用WPF,还是不太适合我的需要。于是自己尝试着从本机C++的MFC程序中调用WPF,使用C# 实现一个COM组件作为中间层。目标是在MFC程序中弹出一个WPF窗口。

  • 建立WPF UserControl library工程
     添加一个Window,命名为MainWindow,实现具体的界面。
  • 建立C# Library工程

    在工程中添加以下引用:

     添加using System.Runtime.InteropServices;

     定义接口:ShowMainWindow.

     代码如下:

<!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> [Guid( " B5229C49-F49D-4A2C-A9F5-CA1249DE3890 " )] // 使用工具生成的GUID
public   interface  UI_Interface
{
    [DispId(
1 )]
    
void  ShowMainWindow();
}


  • 实现接口
    ExpandedBlockStart.gif 代码
    <!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> [Guid( " 85512BED-C76D-4163-9454-F32EE634C4B2 " ), // 使用工具生成的GUID
    ClassInterface(ClassInterfaceType.None),
    ComSourceInterfaces(
    typeof (UI_Events))]
    public   class  UI_Class : UI_Interface
    {
        
    public   void  ShowMainWindow()
        {
            MainWindow main 
    =   new  MainWindow();
            main.ShowDialog();
        }
    }


  • 注册COM接口

     生成强名称文件

          sn –k UI_Interface.snk

     在AssemblyInfo.cs中,添加下面一行

          [assembly: AssemblyKeyFile("UI_Interface.snk")]

     将dll加入GAC

       gacutil /i UIInterface.dll
    注册
     REGASM UIInterface.dll
  • 在MFC中添加代码,调用COM组件
     引用COM组件
     #import “<Full Path>\UIInterface.tlb"
     添加调用代码:
<!--<br/ /> <br/ /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ /> http://www.CodeHighlighter.com/<br/ /> <br/ /> --> CoInitialize(NULL);
UI_InterfacePtruiInterfacePtr;
HRESULThr
=  uiInterfacePtr.CreateInstance(__uuidof(UI_Class));

if (hr ==  S_OK)
{
    uiInterfacePtr
-> ShowMainWindow();
}

CoUninitialize(); 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值