티스토리 뷰

프로그래밍

WinUI 3 C++

에어버스 2023. 3. 24. 14:03

https://cafe.naver.com/winui3

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 코드에 적용하기는 어려울거 같다.

App1.zip
5.60MB

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, NULL200200300300NULL);
        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

<실행화면>

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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