C++/WinRT에서 UWP의 6개 그래픽 그리기(Win2D 사용)

15883 단어 VC++Win2DWinRTC++

1. 이번에 할 일


・ Win2D를 사용하여 그래픽을 그립니다.해야 할 일은 다음과 같은 네 가지다.
① Nugget을 통해 Win2D를 설치합니다.
② 추가 포함 디렉토리에 Win2D 추가 포함 폴더
③MainPage.마이크로소프트.Graphics.Canvas.UI.Xaml.포함
④ 드로잉 프로세스에 대한 설명
・기본적으로Win2D documentation 내용입니다.

2. 새 프로젝트 만들기


·이번에도 블랙앱(C++/WinRT)부터 새로운 프로젝트를 만들어보자.이름은'win2d 1'입니다.
• 완료되면 MainPage.xaml에서 불필요한 myButon을 삭제하십시오.MainPage.h와 MainPage.cpp에서 이벤트 처리 프로그램을 삭제하는 것을 잊지 마십시오.
이번엔 어차피 MainPage 안 써도 돼.idl의 MyProperty도 삭제됩니다.이것도 MainPage야.h와 MainPage.cpp에서 제거하십시오.
• 삭제 후 각각 다음과 같다.모형 맞죠?
MainPage.xaml(변경 후)
<Page
    x:Class="win2d_1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:win2d_1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

</Page>
MainPage.idl(변경 후)
namespace win2d_1
{
    [default_interface]
    runtimeclass MainPage : Windows.UI.Xaml.Controls.Page
    {
        MainPage();
    }
}
MainPage.h(변경 후)
#pragma once

#include "MainPage.g.h"

namespace winrt::win2d_1::implementation
{
    struct MainPage : MainPageT<MainPage>
    {
        MainPage();
    };
}

namespace winrt::win2d_1::factory_implementation
{
    struct MainPage : MainPageT<MainPage, implementation::MainPage>
    {
    };
}
MainPage.cpp(변경 후)
#include "pch.h"
#include "MainPage.h"
#include "MainPage.g.cpp"

using namespace winrt;
using namespace Windows::UI::Xaml;

namespace winrt::win2d_1::implementation
{
    MainPage::MainPage()
    {
        InitializeComponent();
    }
}

2-1. Win2D 설치


· 도구 → NuGet 패키지 관리자 → 해결 방안을 선택하는 NuGet 패키지 관리, 'Win2D' 설치 'Win2D.up' 을 검색합니다. (설치 선택, 검사, 클릭만 하면 됩니다.)


• 신중을 기하기 위해 다시 한번 구축합니다.
• 프로젝트 폴더\Generated Files\winrt 에 원하는 머리글이 나타납니다. 여기에 추가하십시오.
• F:\prg-2 폴더에 "win2d 1"항목이 생성되었으므로 "F:\prg-2\win2d 1\win2d 1\Generated Files\winrt"폴더에 "Microsoft.Graphics.Canvas.UI.Xaml.h"를 생성할 수 있습니다.MainPage입니다.h에 포함되어 있으면 Win2D도 C++/WinRT에서 사용할 수 있습니다.

2-2. Microsoft.Graphics.Canvas.UI.Xaml.포함


· 우선 목록 추가 포함부터 시작합니다.이 일대와 MFC 등에는 변화가 없다.항목→win2d1 속성 → C/C++ → 일반 - 추가 포함 디렉토리에만 추가됩니다.상대 주소로 포장할 수도 있지만.

・여기서 마치면 MainPage.마이크로소프트.Graphics.Canvas.UI.Xaml.포함pch.h안에서 순항하고 싶지만 하면 잘못된 폭풍우가 될 수 있으니 포기하는 게 좋을 것 같아요.

2-3. MainPage.xaml의 변경 사항


・xmlns에 xmlns:canvas = "using: 마이크로소프트.Graphics.Canvas.UI.Xaml"을 추가하여 canvas를 추가합니다.
・ 이후 /canvas:CanvasControl를 메쉬로 둘러서 추가해주세요.Draw=이벤트 프로세서가 추가되므로 이벤트 프로세서를 두 번 클릭하여 추가하십시오.ClearColor="Aqua"저는 개인적으로 물색을 좋아해요. 그냥 취미로 물색 배경을 선택했어요.

MainPage.xaml(변경 후)
<Page
    x:Class="win2d_1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:win2d_1"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:canvas="using:Microsoft.Graphics.Canvas.UI.Xaml"
    mc:Ignorable="d">

    <Grid>
        <canvas:CanvasControl Draw="CanvasControl_Draw" ClearColor="Aqua"></canvas:CanvasControl>
    </Grid>

</Page>

2-4. MainPage.h


아까 마이크로소프트.Graphics.Canvas.UI.Xaml.h를 포함하고 이벤트 처리 프로그램의 설명만 추가합니다.
MainPage.h(변경된 시도 63;)
#pragma once

#include "MainPage.g.h"
#include <Microsoft.Graphics.Canvas.UI.Xaml.h>

namespace winrt::win2d_1::implementation
{
    struct MainPage : MainPageT<MainPage>
    {
        MainPage();
        void CanvasControl_Draw(winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl const& sender, winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs const& args);
    };
}

namespace winrt::win2d_1::factory_implementation
{
    struct MainPage : MainPageT<MainPage, implementation::MainPage>
    {
    };
}

2-5. MainPage.cpp


・CanvasControlDraw에 그릴 처리를 설명합니다.MFC의 Ondraw()와 같이 씁니다.여기에 쓰면 사이즈를 바꿀 수도 있고 최소화할 수도 있어요.이번에는 원형과 사각형에 Hello, World를 써 보았다.
MainPage.cpp(변경 후)
#include "pch.h"
#include "MainPage.h"
#include "MainPage.g.cpp"

using namespace winrt;
using namespace Windows::UI::Xaml;

namespace winrt::win2d_1::implementation
{
    MainPage::MainPage()
    {
        InitializeComponent();
    }
}

void winrt::win2d_1::implementation::MainPage::CanvasControl_Draw(winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasControl const& sender, winrt::Microsoft::Graphics::Canvas::UI::Xaml::CanvasDrawEventArgs const& args)
{
    args.DrawingSession().DrawText(L"Hello, world!", 250, 280, winrt::Windows::UI::Colors::Black());
    args.DrawingSession().DrawCircle(300, 300, 200, winrt::Windows::UI::Colors::BlueViolet(), 5);
    args.DrawingSession().FillRoundedRectangle(600, 50, 300, 200, 20, 20, winrt::Windows::UI::Colors::MediumSeaGreen());
    args.DrawingSession().DrawText(L"Hello, world!", 700, 125, winrt::Windows::UI::Colors::Aqua());
}
실행하면 이런 느낌이에요.

・ 다른 드로잉 함수 등을 수행합니다여기 참조.
・Win2D는 이미지, 알파 혼합, 각종 효과 등을 표시할 수 있으니 하고 싶은 사람은 열심히 실시하세요.
·도 github에 넣는다.
・다음은비동기/async입니까?지금 다양한 시도를 하고 있으니 천천히 기다리세요.
문자 방향

좋은 웹페이지 즐겨찾기