Winrt消息对话框未显示

时间:2018-02-10 16:02:21

标签: c++ windows-runtime messagedialog

我正在尝试从面向Win 10 x64的桌面Windows应用程序中显示C ++(winrt)中的消息对话框。执行以下代码但未显示该对话框。从ShowAsync返回代码是好的

int APIENTRY wWinMain(_In_ HINSTANCE    hInstance,
                         _In_opt_ HINSTANCE hPrevInstance,
                         _In_ LPWSTR        lpCmdLine,
                         _In_ int           nCmdShow)
    {

      Microsoft::WRL::Wrappers::RoInitializeWrapper init(RO_INIT_SINGLETHREADED);

        Microsoft::WRL::ComPtr<ABI::Windows::UI::Popups::IMessageDialogFactory> messageDialogFactory;
        Microsoft::WRL::Wrappers::HStringReference messageDialogFactoryId(RuntimeClass_Windows_UI_Popups_MessageDialog);

        Windows::Foundation::GetActivationFactory(messageDialogFactoryId.Get(), messageDialogFactory.GetAddressOf());

        Microsoft::WRL::ComPtr<ABI::Windows::UI::Popups::IMessageDialog> messageDialog;
        Microsoft::WRL::ComPtr<ABI::Windows::Foundation::Collections::IVector<ABI::Windows::UI::Popups::IUICommand*>> uiCommands;

        messageDialogFactory->CreateWithTitle(Microsoft::WRL::Wrappers::HStringReference(L"XXX").Get(), Microsoft::WRL::Wrappers::HStringReference(L"YYY").Get(), messageDialog.GetAddressOf());
        messageDialog->get_Commands(uiCommands.GetAddressOf());

        Microsoft::WRL::ComPtr<ABI::Windows::UI::Popups::IUICommandFactory> uiCommandFactory;
        Microsoft::WRL::Wrappers::HStringReference commandFactoryId(RuntimeClass_Windows_UI_Popups_UICommand);

        Windows::Foundation::GetActivationFactory(commandFactoryId.Get(), uiCommandFactory.GetAddressOf());

        w::ComPtr<pu::IUICommand> button;
        uiCommandFactory->CreateWithHandler(Microsoft::WRL::Wrappers::HStringReference(L"ZZZ").Get(), new ButtonHandler(), button.GetAddressOf());

        uiCommands->Append(button.Get());

        Microsoft::WRL::ComPtr<ABI::Windows::Foundation::IAsyncOperation<ABI::Windows::UI::Popups::IUICommand*>> showOperation;
        HRESULT hr = messageDialog->ShowAsync(showOperation.GetAddressOf());

        MSG msg;
        while( ::GetMessage(&msg, 0, 0, 0) > 0 )
        {
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
        }


      return 0;
    }

1 个答案:

答案 0 :(得分:0)

应该有阅读文档 - API没有DualApiPartitionAttribute