当前位置 |首页 > 代写教程 > C语言/C++ 教程 >
分享这个代写网站给同学或者朋友吧!

我的上一个专栏中接头了 Windows 运行时 (WinRT) 应用措施模子 (msdn.microsoft.com/magazine/dn342867)。 我演示了如何通过尺度 C++ 和经典 COM 来编写 Windows 应用商店或 Windows Phone 应用措施,个中仅利用了一些 WinRT API 函数。 毫无疑问,您 不必利用 C++/CX 或 C# 这样的语言投射。 可以或许绕过这些抽象观念是一种强大的成果,同时也是一种 相识这项技能事情方法的很好的要领。

我在 2013 年 5 月的专栏中先容了 Direct2D 1.1 并演示了如何利用它在桌面应用措施中举办泛起 (msdn.microsoft.com/magazine/dn198239)。 接下来的专栏先容了 dx.codeplex.com 上提供的 dx.h 库,这可以大幅简化 C++ 中的 DirectX 编程 (msdn.microsoft.com/magazine/dn201741)。

上个专栏中的代码对付实现基于 CoreWindow 的应用措施已经足够,但未提供任何泛起。

本月,我将演示如何操作这种根基的框架并添加泛起支持。 WinRT 应用措施模子针对利用 DirectX 泛起举办了优化。 我将向您演示,如何操作在之前专栏中学到的有关 Direct2D 和 Direct3D 泛起的 内容,将其应用到基于 CoreWindow 的 WinRT 应用措施,详细而言,通过 dx.h 库利用 Direct2D 1.1 。 大大都环境下,岂论您的方针是桌面照旧 Windows 运行时,需要编写的实际 Direct2D 和 Direct3D 绘制呼吁是沟通的。 可是,个中有一些细微的不同,虽然,使其完全运转起来从一开始就有 很大不同。 因此,我将继承上一次的内容,演示如安在屏幕上显示一些像素!

为了正确支持泛起,窗口必需可以或许意识到特定事件。 至少这包罗窗口的可见性和巨细的变动,以及 对用户所选择的逻辑显示 DPI 设置的变动。 在上次专栏中先容的 Activated 事件中,这些新事件都 通过 COM 接口回调陈诉给应用措施。 ICoreWindow 接口提供注册 VisibilityChanged 和 SizeChanged 事件的要领,但首先我需要实现相应的处理惩罚措施。 我需要实现的两个 COM 接口与 Activated 事件处理惩罚措施及其 Microsoft 接口界说语言 (MIDL) 生成的类模板很是相似:

             typedef ITypedEventHandler<CoreWindow *, VisibilityChangedEventArgs *>
     IVisibilityChangedEventHandler;
   typedef ITypedEventHandler<CoreWindow *, WindowSizeChangedEventArgs *>
     IWindowSizeChangedEventHandler;

接下来必需实现的 COM 接口称为 IDisplayPropertiesEventHandler,谢天谢地这个接口已经界说 了。 我只需将相关的头文件包罗在个中:

             #include <Windows.Graphics.Display.h>

另外,相关范例在以下定名空间中界说:

             using namespace ABI::Windows::Graphics::Display;

按照这些界说,我可以更新上次专栏中先容的 SampleWindow 类,也从这三个接口担任:

             struct SampleWindow :
     ...
             IVisibilityChangedEventHandler,
     IWindowSizeChangedEventHandler,
     IDisplayPropertiesEventHandler

同时还需要记着更新我的 QueryInterface 实现以指示对这些接口的支持。 这些内容将让您自行完 成。 虽然,如我上次所说,Windows 运行时并不体贴在那边实现这些 COM 接口回调。 它遵循的原则 是,Windows 运行时不假定我的应用措施 IFrameworkView(SampleWindow 类实现的主要接口)也实现 这些回调接口。 因此,固然 QueryInterface 确实会正确处理惩罚这些接口的查询,不外 Windows 运行时 不会为它们举办查询。 相反,我需要注册相应事件,而最佳位置是在 IFrameworkView Load 要领的实 现中。 提醒一下,Load 要领是应该将所有代码粘贴到这里的要领,以便筹备应用措施举办初始泛起。 接下来在 Load 要领中注册 VisibilityChanged 和 SizeChanged 事件:

             EventRegistrationToken token;
   HR(m_window->add_VisibilityChanged(this, &token));
   HR(m_window->add_SizeChanged(this, &token));

这会明晰汇报 Windows 运行时在那边查找前两个接话柄现。 第三个也是最后一个接口,它针对 LogicalDpiChanged 事件,但此事件注册由 IDisplayPropertiesStatics 接口提供。 此静态接口由 WinRT DisplayProperties 类实现。 我只需利用 GetActivationFactory 函数模板来获取它(在我最 近的专栏中可以找到 GetActivationFactory 的实现):

             ComPtr<IDisplayPropertiesStatics> m_displayProperties;
   m_displayProperties = GetActivationFactory<IDisplayPropertiesStatics> (
     RuntimeClass_Windows_Graphics_Display_DisplayProperties);

成员变量保存此接口指针,在窗口的生命周期中,我需要在差异点上挪用它。 此刻,我可以在 Load 要领中注册 LogicalDpiChanged 事件:

             HR(m_displayProperties- >add_LogicalDpiChanged(this, &token));

代写