티스토리 뷰
https://www.youtube.com/watch?v=5tVUFdDV1js
WinUI3 을 사용하기 위해 VisualStudio installer 에서 추가 설치가 필요하다.
아래 두번째 그림에서 C++를 사용한 데스크톱 개발 에서 Windows 앱 SDK C++ 템플릿을 추가해야 컴파일이 정상적으로 된다. 만약, 그렇지 않으면 세번째 그림처럼 나오지 않고 출력, 중간 디렉토리 정보가 안 나오는 경우가 생긴다.
MFC 가 다른 언어에 비해 컨트롤의 발전이 없는 상태에서 WinUI 3.0 이 C++ 에서 사용이 가능하여 MFC도 큰 변화가 있을것 같았지만 아래 C++ 코드와 같이 기존 MFC와 전혀 다른 코드로 변한다.
.Net Framework 출시 당시에도 C++ 호환을 위해 CLI 가 있었지만 이 역시 MFC 코드와 달라 널리 보급이 안되어 거의 사용이 안되는거 같은데, WinUI 3.0 DataGrid 컨트롤을 C++에서 사용 가능하더라도 코드가 달라 기존 MFC 코드에 적용하기는 어려울거 같다.
XAML 로 안드로이드처럼 화면 디자인을 하게된다.
<화면 디자인>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<Window
x:Class="App1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox x:Name="va"/>
<TextBlock>+</TextBlock>
<TextBox x:Name="vb"/>
<Button x:Name="myButton" Click="myButton_Click">=</Button>
<TextBox x:Name="vc"/>
</StackPanel>
</Window>
|
cs |
C++ 코드>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include "pch.h"
#include "MainWindow.xaml.h"
#if __has_include("MainWindow.g.cpp")
#include "MainWindow.g.cpp"
#endif
#include <microsoft.ui.xaml.window.h>
using namespace winrt;
using namespace Microsoft::UI::Xaml;
namespace winrt::App1::implementation
{
MainWindow::MainWindow()
{
InitializeComponent();
auto windowNative{ this->try_as<::IWindowNative>() };
HWND hWnd{ 0 };
windowNative->get_WindowHandle(&hWnd);
SetWindowPos(hWnd, NULL, 200, 200, 300, 300, NULL);
this->Title(L"My Cal");
}
int32_t MainWindow::MyProperty()
{
throw hresult_not_implemented();
}
void MainWindow::MyProperty(int32_t /* value */)
{
throw hresult_not_implemented();
}
void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&)
{
double a, b, c;
a = std::stod(va().Text().c_str());
b = std::stod(vb().Text().c_str());
c = a + b;
vc().Text(std::to_wstring(c));
//myButton().Content(box_value(L"Clicked"));
}
}
|
cs |
<실행화면>