Win2D“Hello, World!”快速入门

在本主题中,你将为 Win2D 创建一个非常简单的“Hello, World!”项目。

在 Visual Studio 中,根据以下项目模板之一创建新项目:

  • WinUI 3(Windows 应用 SDK)。 要创建新的 WinUI 3 项目,请使用“空白应用,打包(桌面中的 WinUI 3)”项目模板。 可以通过选择语言(C#C++);平台:Windows;项目类型:桌面来查找项目模板。
  • 通用 Windows 平台 (UWP)。 要创建新的 UWP 项目,请使用空白应用(通用 Windows)空白应用 (C++/WinRT)空白应用(通用 Windows - C++/CX)项目模板。 对于语言,请选择:C#C++;平台:Windows;项目类型:UWP

重要

有关如何设置项目以使用 Win2D 的信息,请参阅引用 Win2D NuGet 包

要托管 Win2D 内容,需要将 Win2D CanvasControl 添加到项目的 MainWindow.xaml(对于 UWP 项目则为 MainPage.xaml)。

首先,添加以下 xml 命名空间声明:

xmlns:win2dcanvas="using:Microsoft.Graphics.Canvas.UI.Xaml"

然后添加一个 CanvasControl,其前缀为该 xml 命名空间。 例如,可以将网格添加为布局根目录,如下所示:

<Grid>
    <win2dcanvas:CanvasControl Draw="CanvasControl_Draw" ClearColor="CornflowerBlue"/>
</Grid>

由于已引用但未实现的绘图事件处理程序,目前不会生成项目。 因此,我们将在接下来添加一些绘图代码以与 CanvasControl 交互时修正该问题。

对于 WinUI 3(Windows 应用 SDK) 项目

对于 C# 项目,请将以下事件处理程序添加到 MainWindow.xaml.cs

// MainWindow.xaml.cs
...
public sealed partial class MainWindow : Window
{
    ...
    void CanvasControl_Draw(
        Microsoft.Graphics.Canvas.UI.Xaml.CanvasControl sender,
        Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
    {
        args.DrawingSession.DrawEllipse(155, 115, 80, 30, Microsoft.UI.Colors.Black, 3);
        args.DrawingSession.DrawText("Hello, Win2D World!", 100, 100, Microsoft.UI.Colors.Yellow);
    }
}
...

对于 C++/WinRT 项目,请将以下事件处理程序添加到 MainWindow.xaml.hMainWindow.xaml.cpp

// MainWindow.xaml.h
...
void CanvasControl_Draw(
    winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl const& sender,
    winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs const& args);
...

// MainWindow.xaml.cpp
...
namespace winrt::MYPROJECT::implementation
{
    ...
    void MainWindow::CanvasControl_Draw(
        winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl const& sender,
        winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs const& args)
    {
        args.DrawingSession().DrawEllipse(155, 115, 80, 30, winrt::Microsoft::UI::Colors::Black(), 3);
        args.DrawingSession().DrawText(L"Hello, Win2D World!", 100, 100, winrt::Microsoft::UI::Colors::Yellow());
    }
}

现在可以生成并运行该项目了。 你将看到一些 Win2D 内容 - 一个黑色椭圆,其前面带有黄色“Hello, World!”消息。

对于 UWP 项目

对于 C# 项目,可以使用与 WinUI 3 项目相同的 C# 代码(请参阅上面的对于 WinUI 3 项目部分)。 唯一的区别在于要编辑 MainPage.xaml.cs 而不是 MainWindow.xaml.cs。 并且需要将 Microsoft.UI.Colors 更改为 Windows.UI.Colors

对于 C++/WinRT 项目,请将以下代码添加到 pch.hMainPage.hMainPage.cpp

// pch.h
...
#include <winrt/Microsoft.Graphics.Canvas.UI.Xaml.h>

// MainPage.h
...
void CanvasControl_Draw(
    winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl const& sender,
    winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs const& args);
...

// MainPage.cpp
...
namespace winrt::MYPROJECT::implementation
{
    ...
    void MainPage::CanvasControl_Draw(
        winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl const& sender,
        winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs const& args)
    {
        args.DrawingSession().DrawEllipse(155, 115, 80, 30, winrt::Windows::UI::Colors::Black(), 3);
        args.DrawingSession().DrawText(L"Hello, Win2D World!", 100, 100, winrt::Windows::UI::Colors::Yellow());
    }
}

对于 C++/CX 项目,请将以下事件处理程序添加到 MainPage.xaml.hMainPage.xaml.cpp

// MainPage.xaml.h
...
void CanvasControl_Draw(
	Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl^ sender,
	Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs^ args);
...

// MainWindow.xaml.cpp
...
void MainPage::CanvasControl_Draw(
    Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl^ sender,
    Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs^ args)
{
    args->DrawingSession->DrawEllipse(155, 115, 80, 30, Windows::UI::Colors::Black, 3);
    args->DrawingSession->DrawText("Hello, Win2D World!", 100, 100, Windows::UI::Colors::Yellow);
}

另请参阅