我在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(???);
文档甚至没有说明我可以使用哪些字符串
docs.microsoft.com/en-us/uwp/api/windows.foundation.igetactivationfactory(信誉不足:()
你能给我一个工作代码的例子。 ?
答案 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 introduction和migration 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);