如何设计一个购物网站/企业管理培训机构排名前十

如何设计一个购物网站,企业管理培训机构排名前十,一般做网站的软件,遵义seo快速排名Windows 10 IoT ARM64平台下,UWP应用和MFC程序不一样,同时只能打开一个应用实例。以串口程序为例,如果用户希望同时打开多个应用实例,一个应用实例打开串口1,一个应用实例打开串口2,那么我们可以加载多个页…

        Windows 10 IoT ARM64平台下,UWP应用和MFC程序不一样,同时只能打开一个应用实例。以串口程序为例,如果用户希望同时打开多个应用实例,一个应用实例打开串口1,一个应用实例打开串口2,那么我们可以加载多个页面,在各个页面分别加载功能模块,实现程序功能模块多开。

        本文以UWP串口例程为例,介绍如何用代码实现同时打开多个串口模块页面,进行测试。

1.  创建UWP工程

        1. 打开visual studio 2022,点击“创建新项目”。

        2. 选择筛选条件,语言C++,平台选择Windows,应用类型选择UWP。

        3. 选择“空白应用”,本文以C++/CX为例。

2.  导入需要多开的功能模块页面

        1. 创建工程后,右键点击工程->添加->新建项。

        

        2.选择XAML空白页,给页面命名为SerialPage.xaml,点击添加。

        3. 在工程中可以看到添加的页面SerialPage,将之前写好的UWP串口程序代码COPY过来(参考文章《UWP串口程序开发》),把串口程序的xaml内容拷贝到SerialPage.xaml中,把代码文件.xaml.h和.xaml.cpp的内容也拷贝到对应文件SerialPage.xaml.h和SerialPage.xaml.cpp中。如果原UWP程序页面名称(默认为MainPage)和当前工程名称(SerialPage)不一样,注意全部替换一下。

        4. 双击页面SerialPage.xaml,检查下是否添加成功。编译一下,确认代码都正确COPY过来了。

3.  通过Navigate加载新页面

        UWP中页面Frame的概念,类似MFC中的窗口Dialog,但功能更强大些。主页面可以打开新的子页面,页面本身也可以执行跳转,回退操作。页面的回收由系统负责,当没有Content指向页面后,页面自动被回收

        在主页面中添加一个按钮,按钮中执行代码。

Windows::UI::Xaml::Controls::Frame^ frame= new ref new Windows::UI::Xaml::Controls::Frame();
frame->Navigate(TypeName(SerialPage::typeid));

        设置新页面为当前操作页面。

Window.Current.Content = frame;
Window.Current.Activate();

        每点击一次按钮,就可以加载一个新的SerialPage页面了。

4.  用导航控件SplitView管理多窗口

        为了便于管理打开的新页面,能在它们之间随意切换,可以使用SplitView控件来实现。SplitView由一个导航区域和一个页面区域组成,可以在导航区域Panel中添加不同按钮,在点击后,在页面区域Content中显示对应的页面。根据需求,可以设置导航区域大小,是否自动隐藏等。

        1. 在主页面中添加一个SplitView控件,命名为SplitViewMain。在它的Pane中可以用一个StackPanel来装按钮,给Content命名为FrameMain,在里面随意加一段文字。

<SplitView x:Name="SplitViewMain" DisplayMode="Inline" IsPaneOpen="True" ><SplitView.Pane><StackPanel x:Name="BtnContainer"></StackPanel></SplitView.Pane><SplitView.Content><Frame x:Name="FrameMain"><TextBlock Text="未添加测试接口" VerticalAlignment="Center" HorizontalAlignment="Center"/></Frame></SplitView.Content>
</SplitView>

        2. 在Pane中添加几个按钮,可以加到StackPanel中,让StackPanel来自动排列。

<SplitView.Pane><StackPanel x:Name="BtnContainer"><Button Content="Button1" Click="Button1_Click"/><Button Content="Button2" Click="Button2_Click"/></StackPanel>
</SplitView.Pane>

        3. 在按钮中加入代码

void SPT::MainPage:: Button1_Click (Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{if (m_frame[0] == nullptr){m_frame[0] = ref new Windows::UI::Xaml::Controls::Frame();m_frame[0]->Navigate(TypeName(SerialPage::typeid));          //指定SerialPage}FrameMain = m_frame[0];SplitViewMain->Content = FrameMain;
}

        这样,就可以通过点击不同按钮,进入对应的页面了

5.  动态管理导航控件SplitView内导航按钮

        有时候,如果导航按钮的数量不确定,希望根据实际情况添加或删除导航按钮。本文例程中,每点击一次添加按钮,便添加一个串口测试页面,做法如下。

        1. 在主页面中添加一个按钮,点击一次,便在SplitView的Pane里加入一个按钮,给这个按钮设置参数Tag,便于区分不同按钮。给按钮绑定点击响应函数OnClick。

void SPT::MainPage::BtnSerial_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{Button^ newButton;newButton = ref new Button;
m_Count++;newButton->Tag = m_Count;newButton->Click += ref new Windows::UI::Xaml::RoutedEventHandler(this, &SPT::MainPage::OnClick);BtnContainer->Children->Append(newButton);m_frame[m_Count] = ref new Windows::UI::Xaml::Controls::Frame();m_frame[m_Count]->Navigate(TypeName(SerialPage::typeid));FrameMain = m_frame[m_Count];SplitViewMain->Content = FrameMain;
}

        2. 在按钮的响应函数中读出按钮参数,根据不同的参数决定如何处理,加载哪个页面。

void SPT::MainPage::OnClick(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{Button^ clickButton = safe_cast<Button^>(sender);int id = safe_cast<int>(clickButton->Tag);if (m_frame[id] == nullptr){return; }FrameMain = m_frame[id];SplitViewMain->Content = FrameMain;
}

6.  主页面与导航打开的新页面之间数据通信

        目前导航页面和加载的子页面相对独立,很多时候主界面需要传递数据给子页面,便于子页面初始化,甚至需要给子页面提供函数接口。子页面退出时也需要回调函数通知主页面,并返回处理后的数据。

        本文串口例程中

        1. 设置一个数据结构,把所有主页面要传输的数据打包到这个数据接口中。文本例程中打包数据包括子页面ID,和一个回调接口。

public ref class PageData sealed : public Platform::Object
{
public:PageData(int initValue, Windows::Foundation::EventHandler<int>^ callback): _initValue(initValue), _exitCallback(callback){}property int InitValue {int get() { return _initValue; }}property Windows::Foundation::EventHandler<int>^ ExitCallback {Windows::Foundation::EventHandler<int>^ get() { return _exitCallback; }}
private:int _initValue;Windows::Foundation::EventHandler<int>^ _exitCallback;
};

        2. 在主页面加载子页面时,将打包数据一起传过去,修改Navigate调用。

m_frame[i] = ref new Windows::UI::Xaml::Controls::Frame();
auto exitHandler = ref new Windows::Foundation::EventHandler<int>(this, &MainPage::OnPageExit);
auto data = ref new PageData(i, exitHandler);
m_frame[i]->Navigate(TypeName(SerialPage::typeid), data);
FrameMain = m_frame[i];
SplitViewMain->Content = FrameMain;

        3. 子页面SerialPage重载OnNavigatedTo函数,添加初始化代码

virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
Windows::Foundation::EventHandler<int>^ m_ExitCallback;void SerialPage::OnNavigatedTo(NavigationEventArgs^ e)
{auto data = dynamic_cast<PageData^>(e->Parameter);if (data != nullptr){m_id = data->InitValue;m_ExitCallback = data->ExitCallback;}
}

        4. 子页面退出时调用回调函数,传回参数页面ID

void SPT::SerialPage::BtnExit_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{try{CancelReadTask();ClosePort();}catch (Platform::Exception^ ex){}if (Frame->CanGoBack){Frame->GoBack();}Frame->Content = nullptr;if (m_ExitCallback != nullptr){m_ExitCallback->Invoke(this, m_id);}
}

        5. 主页面处理回调函数

void SPT::MainPage::OnPageExit(Platform::Object^ sender, int id)
{for (int i = 0; i < BtnContainer->Children->Size; ++i){if (Button^ btn = dynamic_cast<Button^>(BtnContainer->Children->GetAt(i))){if (btn->Tag != nullptr && safe_cast<int>(btn->Tag) == id){BtnContainer->Children->RemoveAt(i);return;}}}
}

7.  界面优化

        调整控件的边界Margin,用LinearGradientBrush设置页面及控件背景色,在代码中适当调整控件字体样式,使得界面满足设计需求。

8.  调试

        打开Win10 IoT板子上的调试助手。

        选择工程平台为ARM64,编译运行,示例如下。

        需要程序源码可以联系英创工程师获得。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/75608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

好消息!软航文档控件(NTKO WebOffice)在Chrome 133版本上提示扩展已停用的解决方案

软航文档控件现有版本依赖Manifest V2扩展技术支持才能正常运行&#xff0c;然而这个扩展技术到2025年6月在Chrome高版本上就彻底不支持了&#xff0c;现在Chrome 133开始的版本已经开始弹出警告&#xff0c;必须手工开启扩展支持才能正常运行。那么如何解决这个技术难题呢&…

字典树与01trie

字典树简介 当我们通过字典查一个字或单词的时候&#xff0c;我们会通过前缀或关键字的来快速定位一个字的位置&#xff0c;进行快速查找。 字典树就是类似字典中索引表的一种数据结构&#xff0c;能够帮助我们快速定位一个字符串的位置。 字典树是一种存储字符串的数据结构…

Ceph集群2025(Squid版)快速对接K8S cephFS文件存储

ceph的块存储太简单了。所以不做演示 查看集群 创建一个 CephFS 文件系统 # ceph fs volume create cephfs01 需要创建一个子卷# ceph fs subvolume create cephfs01 my-subvol -----------------#以下全部自动创建好 # ceph fs ls name: cephfs01, metadata pool: c…

游戏引擎学习第183天

回顾和今天的计划 我对接下来的进展感到非常兴奋。虽然我们可能会遇到一些问题&#xff0c;但昨天我们差不多完成了将所有内容迁移到新的日志系统的工作&#xff0c;我们正在把一些内容整合进来&#xff0c;甚至是之前通过不同方式记录时间戳的旧平台层部分&#xff0c;现在也…

OBS虚拟背景深度解析:无需绿幕也能打造专业教学视频(附插件对比)

想要录制教学视频却苦于背景杂乱&#xff1f;本文将手把手教你用OBS实现专业级虚拟背景效果&#xff0c;无需绿幕也能轻松营造沉浸式教学场景。文末附6个提升画面质感的免费背景资源&#xff01; 一、虚拟背景的核心价值&#xff1a;从「教师宿舍」到「虚拟讲堂」的蜕变 我们调…

零基础搭建智能法律知识库!腾讯云HAI实战教程

为什么需要法律知识库&#xff1f; 想象一下&#xff0c;你的所有法律文件都在手边&#xff0c;随时可以搜索和分析。这就是法律知识库的魅力所在。对于法律专业人士、处理大量法律文档的企业&#xff0c;甚至是希望了解法律事项的普通人来说&#xff0c;法律知识库都是一个不…

订票系统|基于Java+vue的火车票订票系统(源码+数据库+文档)

订票系统目录 基于Springbootvue的火车票订票系统 一、前言 二、系统设计 三、系统功能设计 1会员信息管理 2 车次信息管理 3订票订单管理 4留言板管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍…

Snowflake 算法的实现

snowflake(雪花算法)是一个开源的分布式 ID 生成算法&#xff0c;结果是一个 long 型的 ID。snowflake 算法将 64bit 划分为多段&#xff0c;分开来标识机器、时间等信息&#xff0c;具体组成结构如下图所示&#xff1a; snowflake 算法的核心思想是使用 41bit 作为毫秒数&…

图生生AI商品图:一键更换商品,保留原背景

图生生AI商品图工具&#xff0c;推出 “更换商品”功能&#xff0c;只需上传一张参考图和自己的商品图&#xff0c;AI自动完成商品替换&#xff0c;保留原背景&#xff0c;3秒生成专业级电商图&#xff01;无需PS技能&#xff0c;无需复杂操作&#xff0c;真正实现 “一键换商品…

[7-01-03].SpringBoot3集成MinIo

MinIO学习大纲 一、Spingboot整合MinIo 第1步&#xff1a;搭建SpringBoot项目&#xff1a; 第2步&#xff1a;引入minio依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi&q…

Gradle Project import Eclipse

Gradle Project import Eclipse

<项目> 高并发服务器的HTTP协议支持

目录 HTTP模块 模块划分与介绍 模块实现 Util模块 HTTPRequest模块 HTTPResponse模块 HTTPContext模块 ParseHttpLine RecvHttpLine RecvHttpHead ParseHttpHead RecvHttpBody 对外接口 HttpServer模块 OnConnected OnMessage Route IsFileHandler FileHandler Dispatcher …

基于Spring Boot + Vue的银行管理系统设计与实现

基于Spring Boot Vue的银行管理系统设计与实现 一、引言 随着金融数字化进程加速&#xff0c;传统银行业务向线上化转型成为必然趋势。本文设计并实现了一套基于Spring Boot Vue的银行管理系统&#xff0c;通过模块化架构满足用户、银行职员、管理员三类角色的核心业务需求…

JavaEE企业级开发 延迟双删+版本号机制(乐观锁) 事务保证redis和mysql的数据一致性 示例

提醒 要求了解或者熟练掌握以下知识点 spring 事务mysql 脏读如何保证缓存和数据库数据一致性延迟双删分布式锁并发编程 原子操作类 前言 在起草这篇博客之前 我做了点功课 这边我写的是一个示例代码 数据层都写成了 mock 的形式(来源于 JUnit5) // Dduo import java.u…

A2 最佳学习方法

记录自己想法的最好理由是发现自己的想法&#xff0c;并将其组织成可传播的形式 (The best reason for recording what one thinks is to discover what one thinks and to organize it in transmittable form.) Prof Ackoff 经验之谈&#xff1a; 做培训或者写文章&#xff…

【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发

系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目&#xff08;含完整前端后端代码&#xff09;【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲&#xff1a;核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…

【AI神经网络】深度神经网络(DNN)技术解析:从原理到实践

引言 深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;作为人工智能领域的核心技术&#xff0c;近年来在计算机视觉、自然语言处理、医疗诊断等领域取得了突破性进展。与传统机器学习模型相比&#xff0c;DNN通过多层非线性变换自动提取数据特征&#xff0c;解决…

算法训练营第二十三天 | 贪心算法(一)

文章目录 一、贪心算法理论基础二、Leetcode 455.分发饼干二、Leetcode 376. 摆动序列三、Leetcode 53. 最大子序和 一、贪心算法理论基础 贪心算法是一种在每一步选择中都采取当前状态下的最优决策&#xff0c;从而希望最终达到全局最优解的算法设计技术。 基本思想 贪心算…

【零基础入门unity游戏开发——2D篇】2D物理系统 —— 2D刚体组件(Rigidbody2D)

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…

热门面试题第13天|Leetcode 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 222.完全二叉树的节点个数

222.完全二叉树的节点个数&#xff08;优先掌握递归&#xff09; 需要了解&#xff0c;普通二叉树 怎么求&#xff0c;完全二叉树又怎么求 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0222.%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8…