在Visual Studio 中新建一个Visual C++的 Windows应用商店的Windows运行时组件项目,并将项目命名为FilePickerComponent。然后在项目的解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的子菜单栏中选择"新建项",在出现的"添加新项"窗口中选中"头文件(.h)",添加名为"FilePicker.h"的头文件。然后使用同样的方法在"添加新项"窗口中选中"C++ 文件(.cpp)",并添加名为"FilePicker.cpp"的源文件。

接下来打开FilePicker.h头文件,并添加如下的代码:

#pragma once

namespace FilePickerComponent

{

public ref class FilePicker sealed

{

public:

//构造函数

FilePicker();

private:

//声明成员变量openPicker

Windows::Storage::Pickers::FileOpenPicker^ openPicker;

public:

//声明属性FileContent

property Platform::String^ FileContent;

public:

//读取文件

void ReadFile();

};

}

在上面的代码中,定义了一个FilePicker类,在这个类中使用public关键字声明一个公有的构造函数FilePicker。接着使用private关键字声明一个FileOpenPicker类型的私有成员变量openPicker,并使用public关键字声明一个String类型的公有属性FileContent。最后使用public关键字声明一个公有的ReadFile函数,用于读取文件。

定义了FilePicker类以后,接下来打开FilePicker.cpp源文件,添加如下的代码:

// FilePicker.cpp

#include "pch.h"

#include "FilePicker.h"

#include "ppltasks.h"

using namespace Windows::Foundation;

using namespace FilePickerComponent;

using namespace Platform;

using namespace Windows::Storage;

using namespace Windows::Storage::Streams;

using namespace Windows::Storage::Pickers;

using namespace Concurrency;

在上面的代码中,使用include关键字引用头文件pch.h、FilePicker.h和ppltasks.h,并使用using指令引用命名空间Windows::Foundation、FilePickerComponent、Platform、Windows::Storage、Windows::Storage::Streams、Windows::Storage::Pickers和Concurrency。

引用了上面的头文件和命名空间以后,接下来在FilePicker.cpp源文件中添加FilePicker构造函数的实现代码,此构造函数中并不实现任何的功能,具体代码如下所示:

FilePicker::FilePicker()

{

}

添加了FilePicker构造函数的实现代码以后,接下来在FilePicker.cpp源文件中添加ReadFile函数的实现代码,具体代码如下所示:

//读取文件

void FilePickerComponent::FilePicker::ReadFile()

{

//创建文件打开选择器

openPicker =ref new FileOpenPicker();

//设置视图模式

openPicker->ViewMode = PickerViewMode::List;

//设置访问的初始位置

openPicker->SuggestedStartLocation = PickerLocationId:: Desktop;

//设置显示的文件类型,允许读取的文件类型

openPicker->FileTypeFilter->Append(".txt");

openPicker->FileTypeFilter->Append(".BAK");

//显示文件选择器,选择文件

create_task(openPicker->PickSingleFileAsync()).then([this](StorageFile^ file)

{

//读取文件内容

return FileIO::ReadTextAsync(file,UnicodeEncoding::Utf8);

}).then([this](task<String^> fileTask){

//将文本内容赋值给FileContent

FileContent = fileTask.get();

});

}

在上面的代码中,首先创建一个FileOpenPicker类的对象openPicker,并将PickerViewMode枚举中的枚举成员List赋值给openPicker对象的ViewMode属性,设置文件打开选取器的视图模式为列表模式。接着将PickerLocationId枚举中的枚举成员Desktop赋值给openPicker对象的SuggestedStartLocation属性,设置文件打开选取器的初始位置为桌面。然后使用openPicker对象的FileTypeFilter属性得到文件打开选取器显示的文件类型集合,并调用Append函数将文件类型".txt"和".BAK"添加到这个集合中。

接下来调用openPicker对象的PickSingleFileAsync函数选取单个文件,并得到一个StorageFile类型的对象file。然后将file对象作为参数传递给FileIO类的ReadTextAsync函数,并以Utf8编码格式来读取所选择的文件,得到一个task<String^>类型的对象fileTask。最后调用fileTask对象的get函数得到文件中的内容,并赋值给FileContent属性。

转载于:https://www.cnblogs.com/finehappy/p/6645675.html

Win系列:VC++编写自定义组件相关推荐

  1. k8s kubebuilder系列开发 — 编写自定义资源和Reconciliation循环

    原文转自公众号云原生CTO 这是 Kubernetes Operator Dev N 部分系列的第三部分.在本文中,我们将深入探讨如何编写自定义资源和operator/控制器的reconciliati ...

  2. Win10系列:VC++调用自定义组件1

    通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ...

  3. vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件

    大家好,本篇文章我将带着大家一起学习如何编写自定义组件(Components),通过「vue基础」新手快速入门篇(一)这篇文章的学习,我们知道了 Vue 设计的目的就是为了方便我们创建基于组件UI的项 ...

  4. 前端组件库(Element UI)的实现原理:教你如何实现自定义组件库,并打包发布至npm

    前端组件库实现原理 前言 Demo地址 一. 组件库开发流程 1)新建vue项目: 2)编写自定义组件,封装成插件: 3)修改配置项 webpack.config.js: pakage.json: 4 ...

  5. Vue中Pdf预览及打印(自定义组件)

    思路: 1. vue中使用ifream访问后台 2.封装共用vue组件 3.后台通过freemaker模板生成相应pdf 效果: 编写自定义组件PdfView.vue <template> ...

  6. 关于微信小程序自定义组件引入未生效问题

    文章目录 原因 可能原因一 可能原因二 成功后截图 自定义组件完整使用步骤 1.在`components`文件夹下建立组件 2.编写自定义组件样式 3.引入自定义组件 原因 可能原因一 组件的外部样式 ...

  7. 一步步教你实现微信小程序自定义组件

    一步步教你实现微信小程序自定义组件 更新时间:2022年03月21日 11:12:34   作者:naluduo233 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,下面这篇文章主 ...

  8. 17_微信小程序之抖音微视无限滑动视频列表自定义组件编写

    微信小程序之抖音微视无限滑动视频列表自定义组件编写 一.先上效果图 看到上面,你可能首先会想到,使用swiper然后将swiper的circular设置为true,那么,想象一下,假如视频很多的情况下 ...

  9. 萌新爬坑系列-百度小程序自定义组件

    萌新爬坑系列-百度小程序自定义组件 百度小程序自定义组件的一个小问题 本人小萌新一个,毕业不久,入行前端也不久,摸索着写点东西,也当是自己爬坑的一个记录吧. 最近做了微信小程序,转百度小程序简直痛不欲 ...

最新文章

  1. 验证ArrayList是线程不安全的集合
  2. 决战 平安京服务器维护,《决战!平安京》2018年9月7日维护公告
  3. Spring boot表单提交日期格式
  4. mysql可以关联视图_Mysql 五: 数据库自关联、视图
  5. 圣诞节海报设计需要的手写字体素材
  6. WEB-INF 目录下的文件无法直接浏览器访问
  7. 做 Python 代码重构,竟发现这些“潜规则”!
  8. hashmap.clear会不会失败_每日三省吾身 | 试问:现在的你,还害怕失败吗?
  9. POJ 3984 迷宫问题 (Dijkstra)
  10. 【树状数组】【P3608】平衡的照片
  11. 用Python制作圣诞树
  12. 知更鸟php,PHP编辑器:phpDesigner
  13. win10怎么做文件服务器,win10怎么做云服务器
  14. bzoj 3709 [PA2014]Bohater
  15. bilibili笔试题
  16. 校园网不能建立到远程计算机,校园网已拒绝远程连接是什么问题及如何解决
  17. 分布式系统----时钟同步
  18. 互信息(Mutual Information)的介绍
  19. 独立的荣耀将首次与华为打擂台,谁的折叠手机更有优势?
  20. poi多个模板实现文档合并

热门文章

  1. 机器学习、深度学习方面书籍收集(持续更新……)
  2. 为何Transformer在计算机视觉中如此受欢迎
  3. html与markdown互相转换
  4. Python-Anaconda练习candy算子用于边缘提取,再用hough变换检测直线边缘
  5. 两种贝塞尔曲线选点方法的对比
  6. java几最快_Java 11 究竟比 8 快了多少?
  7. matlab抖g是什么,MATLAB中dither抖动函数的用法
  8. html选择按钮select,Html选择使用select来改变一个按钮的链接使用Javascript
  9. JBox2D手机游戏引擎介绍(附jbox2d官网网址)
  10. 集合覆盖模型例题_在打CodeForces的过程中发现的一个小模型