[学习][笔记]C++/WinRT入门 01Hello world

简介: [学习][笔记]C++/WinRT入门 01Hello world

微软 C++/WinRT简介

windows RT开发笔记:WinRT DLL及其调用研究

How to access the Windows 10 APIs from C++

sample

C++/WinRT学习笔记(五):异步操作和强弱引用

使用 C++/WinRT 创建“Hello, World!” 应用

C++/WinRT入门

介绍

Hello world

1.创建空白应用(C++/WinRT)

项目目录

xaml文件

XAML 标记文件以创建 UI 元素,并且可以将这些元素绑定到数据源(此任务称为数据绑定)。 你可以修改 .h 和 .cpp 文件(有时为 .idl 文件),为 XAML 页面添加自定义逻辑 — 例如事件处理程序。

App.xaml

App.idl、App.xaml、App.h 和 App.cpp。 这些文件表示应用对 Windows::UI::Xaml::Application 类的专业化,其中包括应用的入口点。 App.xaml 不包含任何特定于页面的标记,但你可以在其中添加用户界面元素样式,还可以添加你希望可从所有页面访问的任何其他元素。 .h 和 .cpp 文件包含各种应用程序生命周期事件的处理程序。 通常,你在此处添加自定义代码,以在应用启动时初始化应用并在它暂停或终止时执行清理。

MainPage.xaml

MainPage.idl、MainPage.xaml、MainPage.h 和 MainPage.cpp。 包含应用中默认主(启动)页面类型的 XAML 标记和实现,即 MainPage 运行时类。 MainPage 没有导航支持,但它提供了一些默认的 UI 和一个事件处理程序来帮助你入门。

pch.h

pch.h 和 pch.cpp。 这些文件表示项目的预编译头文件。 在 pch.h 中,包含不经常更改的任何头文件,然后将 pch.h 包含在项目中的其他文件中。

module.g.cpp

Package.appxmanifest

packages.config

PropertySheet.props

nut包管理相关配置

2.修改MainPage.xaml

步骤 1: 修改启动页 MainPage.xaml

删除StackPanel

粘贴复制以下内容到MainPage.xaml:

<StackPanel x:Name="contentPanel" Margin="120,30,0,0">
    <TextBlock HorizontalAlignment="Left" Text="Hello, World!" FontSize="36"/>
    <TextBlock Text="What's your name?"/>
    <StackPanel x:Name="inputPanel" Orientation="Horizontal" Margin="0,20,0,20">
        <TextBox x:Name="nameInput" Width="300" HorizontalAlignment="Left"/>
        <Button x:Name="inputButton" Content="Say &quot;Hello&quot;"/>
    </StackPanel>
    <TextBlock x:Name="greetingOutput"/>
</StackPanel>

已删除名为 myButton 的 Button,因此必须从代码中删除对它的引用。

MainPage.cpp 中删除 MainPage::ClickHandler 函数内的相应代码行。

MainPage.h中删除void ClickHandler

3.添加事件处理程序

在 MainPage.xaml 中,找到名为 inputButton 的 Button,并为其 ButtonBase::Click 事件声明一个事件处理程序。 Button 的标记现应如下所示。

XAML

复制

<Button x:Name="inputButton" Content="Say &quot;Hello&quot;" Click="inputButton_Click"/>

按如下所示实现该事件处理程序。

C++/WinRT

复制

// MainPage.h
struct MainPage : MainPageT<MainPage>
{
    ...
    void inputButton_Click(
        winrt::Windows::Foundation::IInspectable const& sender,
        winrt::Windows::UI::Xaml::RoutedEventArgs const& e);
};
// MainPage.cpp
namespace winrt::HelloWorldCppWinRT::implementation
{
    ...
    void MainPage::inputButton_Click(
        winrt::Windows::Foundation::IInspectable const& sender,
        winrt::Windows::UI::Xaml::RoutedEventArgs const& e)
    {
        greetingOutput().Text(L"Hello, " + nameInput().Text() + L"!");
    }
}

该实现从文本框中检索用户名称,使用该名称创建问候语,并在 greetingOutput 文本块中显示该问候语。

构建并运行应用。 在文本框中键入名称,然后单击按钮。 应用将显示个性化的问候语。

4.设置启动页的样式

选择主题

轻松自定义应用的外观。 默认情况下,应用使用具有浅色样式的资源。 系统资源还包含深色主题。

若要尝试使用深色主题,请编辑 App.xaml,并为 Application::RequestedTheme 添加一个值。

//App.xaml
<Application
    ...
    RequestedTheme="Dark">
</Application>

对于主要显示图像或视频的应用,我们建议使用深色主题;

对于包含大量文本的应用,我们建议使用浅色主题。

如果你使用的是自定义配色方案,则请使用最适合应用外观和感觉的主题。

备注
在应用启动时应用主题。 无法在应用运行时更改主题。

使用系统样式

更改文本的外观(例如将字号变大)。

在 MainPage.xaml 中,找到“What’s your name?” TextBlock。 将其 Style 属性设置为对 BaseTextBlockStyle 系统资源键的引用。

XAML

<TextBlock Text="What's your name?" Style="{ThemeResource HeaderTextBlockStyle}"/>

可以 对HeaderTextBlockStyle按F12查看具体属性

同样,在 MainPage.xaml 中找到名为 greetingOutput 的 TextBlock。 也将其 Style 设置为 HeaderTextBlockStyle。 如果你现在生成并运行应用,则可看到这两个文本块的外观已更改(例如字号现在变大了)。

5.使 UI 适应不同的窗口大小

调整 UI 布局

将此 XAML 块添加为根 StackPanel 元素的第一个子元素。

现在,我们将使 UI 动态地适应不断变化的窗口大小,使其在屏幕较小的设备上的显示效果不错。 为此,需要将 VisualStateManager 部分添加到 MainPage.xaml 中。 为不同的窗口大小定义不同的可视状态,然后设置属性以应用于每个可视状态。

MainPage.xaml修改后

<Page
    x:Class="_02HelloWinRTApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:_02HelloWinRTApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">
    <StackPanel x:Name="contentPanel" Margin="120,30,0,0">
        <TextBlock HorizontalAlignment="Left" Text="Hello, World!" FontSize="36"/>
        <TextBlock Text="What's your name?" Style="{ThemeResource HeaderTextBlockStyle}"/>
        <StackPanel x:Name="inputPanel" Orientation="Horizontal" Margin="0,20,0,20">
            <TextBox x:Name="nameInput" Width="300" HorizontalAlignment="Left"/>
            <Button x:Name="inputButton" Content="Say &quot;Hello&quot;" Click="inputButton_Click" />
        </StackPanel>
        <TextBlock x:Name="greetingOutput" Style="{ThemeResource HeaderTextBlockStyle}" />
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup>
                <VisualState x:Name="wideState">
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="641" />
                    </VisualState.StateTriggers>
                </VisualState>
                <VisualState x:Name="narrowState">
                    <VisualState.StateTriggers>
                        <AdaptiveTrigger MinWindowWidth="0" />
                    </VisualState.StateTriggers>
                    <VisualState.Setters>
                        <Setter Target="contentPanel.Margin" Value="20,30,0,0"/>
                        <Setter Target="inputPanel.Orientation" Value="Vertical"/>
                        <Setter Target="inputButton.Margin" Value="0,4,0,0"/>
                    </VisualState.Setters>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>
    </StackPanel>
    <!--<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Button x:Name="myButton" Click="ClickHandler">Hello world</Button>
    </StackPanel>-->
</Page>

构建并运行应用。

请注意,UI 外观与以前相同,除非将窗口调整为窄于 641 与设备无关的像素 (DIP)。 此时,应用 narrowState 可视状态,同时应用为该状态定义的所有属性 Setter。

名为 wideState 的 VisualState 具有一个AdaptiveTrigger,并且其 MinWindowWidth 属性设置为 641 。这意味着仅在窗口宽度不小于 641 DIP的最小值时应用该状态。 你没有为此状态定义任何 Setter 对象, 因此它会将你在 XAML 中定义的布局属性用于页面内容。

名为narrowState 的第二个 VisualState 具有一个 AdaptiveTrigger,其 MinWindowWidth

属性设置为 0。 当窗口宽度大于 0 但小于 641 DIP 时,应用此状态。 正好为 641 DIP 时,wideState 将生效。

在narrowState 中,定义 Setter 对象以更改 UI 中控件的布局属性。 将 contentPanel 元素的左边距从 120

降低为 20。 将 inputPanel 元素的 Orientation 从 Horizontal 更改为 Vertical 。 将 4

DIP 的上边距添加到 inputButton 元素。

添加前

添加后

总结

问题1

创建项目时候 第一次编译会提示各种头文件找不到

原因:

当前项目目录/Debug/Generated Files 一些头文件没有生成

解决办法是找一份生成了的拷进去(至少我是这样做的,[狗头],有更好办法请留言hhh)

问题2

删除clickhandler没删除干净 相关声明等 没重新编译 临时文件内提示。

相关文章
|
10天前
|
算法 网络安全 区块链
2023/11/10学习记录-C/C++对称分组加密DES
本文介绍了对称分组加密的常见算法(如DES、3DES、AES和国密SM4)及其应用场景,包括文件和视频加密、比特币私钥加密、消息和配置项加密及SSL通信加密。文章还详细展示了如何使用异或实现一个简易的对称加密算法,并通过示例代码演示了DES算法在ECB和CBC模式下的加密和解密过程,以及如何封装DES实现CBC和ECB的PKCS7Padding分块填充。
31 4
2023/11/10学习记录-C/C++对称分组加密DES
|
2月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
2月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
47 2
C++入门12——详解多态1
|
2月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
89 1
|
2月前
|
存储 安全 编译器
【C++打怪之路Lv1】-- 入门二级
【C++打怪之路Lv1】-- 入门二级
32 0
|
2月前
|
自然语言处理 编译器 C语言
【C++打怪之路Lv1】-- C++开篇(入门)
【C++打怪之路Lv1】-- C++开篇(入门)
39 0
|
2月前
|
分布式计算 Java 编译器
【C++入门(下)】—— 我与C++的不解之缘(二)
【C++入门(下)】—— 我与C++的不解之缘(二)
|
2月前
|
编译器 Linux C语言
【C++入门(上)】—— 我与C++的不解之缘(一)
【C++入门(上)】—— 我与C++的不解之缘(一)
|
1月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
51 2
|
1月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
105 5