网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

在MFC中使用WPF技术

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/13
sp;
    三、在MFC应用程序中加入和WPF相关的代码

    先提一下,gcnew关键字被用于建立一个管制类型的实例,在本例中将建立一个垃圾回收集合栈的实例。所有被gcnew分配的内存空间将被垃圾回收器自动管理,而开发人员并不需要为什么时间释放它们而操心。

    为了使用WPF程序,关键是System::Windows::Interop::HwndSource类。这个类将在Win32窗口中使用WPF程序,因此,WPF程序可以作为MFC窗口的子窗口放到UI上。而在WPF对象和Win32窗口之间的通讯要通过引用C++程序中被的静态字段。这些静态字段的代码如下:

   

ref class Globals{public:static System::Windows::Interop::HwndSource^ gHwndSource;static WPFControls::AnimClock^ gwcClock;};
     
    HWND hwndWPF;    // 和WPF相关的hwnd
    为了建立一个HwndSource,首先需要建立一个HwndSourceParameters结构,这个结构需要如下的参数:
    1. 类、窗口、窗口类型
    2. 窗口的初始位置
    3. 窗口的初始尺寸
    4. 父窗口
    一但我们将HwndSourceParameters结构编写完,就可以将这个结构到HwndSource的构造方法HwndSource(HwndSourceParameters)中。
    最后,我们将WPF时钟的引用赋值给HwndSource对象的RootVisual属性,并通过调用Handle.ToPointer()返回HwndSource的HWND。代码如下:
HWND GetHwnd(HWND parent, int x, int y, int width, int height){System::Windows::Interop::HwndSourceParameters^ sourceParams =      gcnew System::Windows::Interop::HwndSourceParameters("MFCWPFApp");sourceParams->PositionX    = x;sourceParams->PositionY    = y;sourceParams->Height       = height;sourceParams->Width        = width;sourceParams->ParentWindow = IntPtr(parent);sourceParams->WindowStyle  = WS_VISIBLE | WS_CHILD;Globals::gHwndSource =      gcnew System::Windows::Interop::HwndSource(*sourceParams);DateTime tm = DateTime::Now;Globals::gwcClock = gcnew WPFControls::AnimClock();Globals::gwcClock->ChangeDateTime(tm.Year,tm.Month,tm.Day,tm.Hour,tm.Minute,tm.Second);FrameworkElement^ myPage = Globals::gwcClock;Globals::gHwndSource->RootVisual = myPage;return (HWND) Globals::gHwndSource->Handle.ToPointer();}

    
    因此,无论用户如何变化时钟,我们的MFC代码都会调用RefereshWPFControl()来刷新WPF时钟。
void RefreshWPFControl(){FrameworkElement^ page;DateTime tm = DateTime::Now;Globals::gwcClock->ChangeDateTime(tm.Year,tm.Month,tm.Day,tm.Hour,tm.Minute,tm.Second);page = Globals::gwcClock;Globals::gHwndSource->RootVisual = page;return;}
    
    现在我们已经有了大部分我们需要的功能了,而最后的任务是在MFC对话框代码中找个地方调用HwndSource实现创建函数。当然,有很多地方可以做这个工作,但是OnCreate也许是最好的位置。在OnCreate事件句柄中调用GetHwnd()函数的代码如下:
int CMFCHostWPFDlg::OnCreate(LPCREATESTRUCT lpCreateStruct){if (CDialog::OnCreate(lpCreateStruct) == -1)return -1;hwndWPF = GetHwnd(this->GetSafeHwnd(), 20, 28, 205, 130);return 0;}

    
    四、结论

 

  • 上一篇资讯: asp.net 生成图片验证码
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号