C++/WinRT에서 UWP의 6개 그래픽 그리기(Win2D 사용)
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입니까?지금 다양한 시도를 하고 있으니 천천히 기다리세요.
문자 방향
Reference
이 문제에 관하여(C++/WinRT에서 UWP의 6개 그래픽 그리기(Win2D 사용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/lilac0011/items/17b3cb503154a8bbf19d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
·이번에도 블랙앱(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' 을 검색합니다. (설치 선택, 검사, 클릭만 하면 됩니다.)
![](https://s1.md5.ltd/image/afd6c44016b8d7bd6179443920f2aa82.png)
![](https://s1.md5.ltd/image/ba817bfd8e888f7f88ac87853e8cd848.png)
• 신중을 기하기 위해 다시 한번 구축합니다.
• 프로젝트 폴더\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에서 사용할 수 있습니다.
![](https://s1.md5.ltd/image/391ed1987d4228049ba734209fb0dabd.png)
2-2. Microsoft.Graphics.Canvas.UI.Xaml.포함
· 우선 목록 추가 포함부터 시작합니다.이 일대와 MFC 등에는 변화가 없다.항목→win2d1 속성 → C/C++ → 일반 - 추가 포함 디렉토리에만 추가됩니다.상대 주소로 포장할 수도 있지만.
![](https://s1.md5.ltd/image/33f513c2ad27d9042f811dd489677d4f.png)
・여기서 마치면 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"저는 개인적으로 물색을 좋아해요. 그냥 취미로 물색 배경을 선택했어요.
![](https://s1.md5.ltd/image/f74cd537733868bd6905592e37965179.png)
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());
}
실행하면 이런 느낌이에요.![](https://s1.md5.ltd/image/d25b614e8bdd7c8e12144654eceaeed0.png)
・ 다른 드로잉 함수 등을 수행합니다여기 참조.
・Win2D는 이미지, 알파 혼합, 각종 효과 등을 표시할 수 있으니 하고 싶은 사람은 열심히 실시하세요.
·도 github에 넣는다.
・다음은비동기/async입니까?지금 다양한 시도를 하고 있으니 천천히 기다리세요.
문자 방향
Reference
이 문제에 관하여(C++/WinRT에서 UWP의 6개 그래픽 그리기(Win2D 사용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/lilac0011/items/17b3cb503154a8bbf19d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)