在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属性。

Win系列:VC++编写自定义组件的更多相关文章

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

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

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

    (3)C++/CX调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C++的Windows应用商店的空白应用程序项目,并命名为FileCPP.接着右键点击Fil ...

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

    (2)C#调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C#的Windows应用商店的空白应用程序项目,并命名为FileCS.接着右键点击FileCS项目的 ...

  4. 小程序 模态对话框自定义组件(modal)

    1. 概述 1.1 说明 小程序中使用wx.showModal(Object object)打开一个模态对话框,但是目前小程序所提供的modal中的内容显示比较死板,不能够完全满足工作中所遇到的功能信 ...

  5. 小程序之自定义组件 ---- 列表goodsList

    教程请查看小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ 自定义组件:自定义组 ...

  6. flex 自定义组件的编写

    使用flex也很久了,也改过别人写的flex自定义组件,但是就是没有系统的研究下flex组件的编写步骤,和要注意的东西,在这里我参照一本书中的例子,好好的理解下,也为了巩固下自己对flex的理解! 1 ...

  7. React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发

    React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发   2016/09/23 |  React Native技术文章 |  Sky丶清|  4 条评论 |  1 ...

  8. Android自定义组件系列【7】——进阶实践(4)

    上一篇<Android自定义组件系列[6]--进阶实践(3)>中补充了关于Android中事件分发的过程知识,这一篇我们接着来分析任老师的<可下拉的PinnedHeaderExpan ...

  9. Android自定义组件系列【6】——进阶实践(3)

    上一篇<Android自定义组件系列[5]--进阶实践(2)>继续对任老师的<可下拉的PinnedHeaderExpandableListView的实现>进行了分析,这一篇计划 ...

随机推荐

  1. IPC 之 Binder 初识

    概述 最近在看Android 的 IPC 机制,想要系统的研究一下,然后就走到了 Binder 这里,发现这个东西真是复杂,查看了一下些文章想要记录下.想要自己写但是发现一篇文章已经写的非常好了,就转 ...

  2. 力扣(LeetCode) 35. 搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...

  3. 学习笔记38—国外appleID注册教程

    国外appleid注册教程来啦….至于国外appleid有什么用处就不过多的介绍了,需要的人自然是知道,不知道的百度下.1.首先打开苹果appleid注册网址:https://appleid.appl ...

  4. Mint wine

    卸载 http://blog.csdn.net/ouyangying123/article/details/459126051.终端中执行sudo apt-get remove wine1.3(win ...

  5. CC4 表达方式----输赢

    “我要赢,不管付出什么,我一定要赢!”当我赢得时候,“我赢了!(欢呼)”.当我输的时候“不,我不要输.不开心.(垂头丧气)”.这样的场景你是否熟悉呢?我的一生都在经历输赢.以前我会为了赢一场游戏,花费 ...

  6. 在docker 容器中安装命令

    apt-get update ##跟新 //vi apt install vim //weget apt install weget //yum apt install yum //ifconfig ...

  7. redflag的echarts结构

    总体的市场情况 这里我需要4个data数组. var list = { currentData:[],//这里表示当月数据量,数组长度8 totalData:[],//这里表示的累计数据量,数组长度8 ...

  8. 如何解决failed to load the jni shared library问题

    如何解决failed to load the jni shared library问题  首先,我们来查看JDK是多少位的,在搜索框中输入cmd,然后打开命令行窗口.  在命令行中输入java -ve ...

  9. python中的静态方法、类方法、属性方法(福利:关于几种方法更好的解释)

    该部分的三个属性都是高级方法,平时用的地方不是很多 一.静态方法 静态方法的使用不是很多,可以理解的就看一下,用的地方不是很多 class Dog(object): def __init__(self ...

  10. nginx反向代理实例

    通过一个例子演示一下nginx是如何代理服务的,并且讲一下nginx.conf的关于server模块和location模块的配置 server模块:配置虚拟主机的相关参数,一个http中可以有多个se ...