Toast Notifications Windows 10 with cppwinrt library

时间:2017-05-13 13:36:08

标签: c++ windows-runtime

我在c ++上找到了如何在Windows 10中制作Toast Notifications的示例

https://github.com/WindowsNotifications/desktop-toasts/blob/master/CPP/DesktopToastsSample.cpp

在我看来,这段代码有C风格而不是C ++,对我来说看起来不太好。

我为с++ https://github.com/Microsoft/cppwinrt

找到了winrt的包装器

现在我正在尝试编写类似于示例中的类似代码,但是使用winrt。

在示例中有行

ComPtr<IToastNotificationManagerStatics> toastStatics;
HRESULT hr = Windows::Foundation::GetActivationFactory(
   HStringReference(RuntimeClass_Windows_UI_Notifications_ToastNotificationManager).Get(),
&toastStatics);

我开始编写代码

#include "winrt/Windows.UI.Notifications.h"
#include "winrt/Windows.Foundation.h"
using namespace winrt::Windows::UI::Notifications;
using namespace winrt::Windows::Foundation;
void main() {
    auto igetaf = IGetActivationFactory();
    igetaf.GetActivationFactory(???);
  1. 如何将字符串转换为winrt :: hstring
  2. 如何转换RuntimeClass_Windows_UI_Notifications_ToastNotificationManager hstring
  3. 文档甚至没有说明我可以使用哪些字符串

    docs.microsoft.com/en-us/uwp/api/windows.foundation.igetactivationfactory(信誉不足:()

    你能给我一个工作代码的例子。 ?

1 个答案:

答案 0 :(得分:3)

目前有三种主要的方法可以从C ++中使用Windows Runtime类。首先是使用ABI,what you found。正如您所发现的那样,它非常麻烦。

其次是C ++ / CX,它使用^符号来表示Windows运行时类。 You can see an example of this style in the UWP samples repo

第三是C ++ / WinRT。在C ++ / WinRT中,对象直接表示为类。有an introductionmigration guide

在C ++ / WinRT中,你根本不与班级工厂合作。 (因此无需为类名创建hstring,也不需要IGetActivationFactory。)

覆盖所有C ++ / WinRT超出了本网站的范围,但这里是草图:

using winrt::Windows::UI::Notifications::ToastNotification;
using winrt::Windows::UI::Notifications::ToastNotificationManager;
using winrt::Windows::Data::Xml::Dom::XmlDocument;

XmlDocument doc;
doc.LoadXml(L"<toast...>...</toast>");
ToastNotification toast(doc);
ToastNotificationManager::CreateToastNotifier(L"appid").Show(toast);