Win系列:VC++编写自定义组件
在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++编写自定义组件的更多相关文章
- Win10系列:VC++调用自定义组件1
通过20.9.1小节中的代码和步骤编写了一个名为"FilePickerComponent"的WinRT组件,接下来将在上一小节所新建的项目基础上,继续介绍如何在不同的语言所编写的应 ...
- Win10系列:VC++调用自定义组件3
(3)C++/CX调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C++的Windows应用商店的空白应用程序项目,并命名为FileCPP.接着右键点击Fil ...
- Win10系列:VC++调用自定义组件2
(2)C#调用WinRT组件 在解决方案资源管理器中右键点击解决方案图标,选择添加一个Visual C#的Windows应用商店的空白应用程序项目,并命名为FileCS.接着右键点击FileCS项目的 ...
- 小程序 模态对话框自定义组件(modal)
1. 概述 1.1 说明 小程序中使用wx.showModal(Object object)打开一个模态对话框,但是目前小程序所提供的modal中的内容显示比较死板,不能够完全满足工作中所遇到的功能信 ...
- 小程序之自定义组件 ---- 列表goodsList
教程请查看小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/ 自定义组件:自定义组 ...
- flex 自定义组件的编写
使用flex也很久了,也改过别人写的flex自定义组件,但是就是没有系统的研究下flex组件的编写步骤,和要注意的东西,在这里我参照一本书中的例子,好好的理解下,也为了巩固下自己对flex的理解! 1 ...
- React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发
React Native实战系列教程之自定义原生UI组件和VideoView视频播放器开发 2016/09/23 | React Native技术文章 | Sky丶清| 4 条评论 | 1 ...
- Android自定义组件系列【7】——进阶实践(4)
上一篇<Android自定义组件系列[6]--进阶实践(3)>中补充了关于Android中事件分发的过程知识,这一篇我们接着来分析任老师的<可下拉的PinnedHeaderExpan ...
- Android自定义组件系列【6】——进阶实践(3)
上一篇<Android自定义组件系列[5]--进阶实践(2)>继续对任老师的<可下拉的PinnedHeaderExpandableListView的实现>进行了分析,这一篇计划 ...
随机推荐
- Java——Collections
反转数组 Collections.reserve(ArrayList) 例子如下 /** * public class ListNode { * int val; * ListNode next = ...
- 构造函数中用:base
如果person中有自己写的构造函数 则Student类的构造方法必须要加:base继承这个构造方法!因为默认的Student:base(空)构造方法已经被干掉了 构造方法的调用//base里的参数, ...
- CoordinatorLayout实现的效果(标题栏效果)
一.效果 CoordinatorLayouy是一个能够协调子布局的容器布局. 使用引入: compile 'com.android.support:design:24.1.1' 常见的使用方法如下:1 ...
- JAVA基础知识总结:一到二十二全部总结
>一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...
- 虚拟机vmnet0、vmnet1和vmnet8的区别
vmnet0,实际上就是一个虚拟的网桥 vmnet0,实际上就是一个虚拟的网桥,这个网桥有很若干个端口,一个端口用于连接你的Host,一个端口用于连接你的虚拟机,他们的位置是对等的,谁也不是谁的网关. ...
- 目前用到的一些os.path方法
这里主要记录下os.path.join()的用法 目录结构如下 在readconfig.py中进行试验,如下 1.使用os.path.realpath(__file__)获取文件所在目录 import ...
- 最简单的解决Chrome浏览器主页被hao123、360和2345篡改的方法是什么
最简单的解决Chrome浏览器主页被hao123.360和2345篡改的方法是什么 一.总结 一句话总结:打开chrome的安装目录,将chrome.exe改成chrome1.exe即可,然后发送一个 ...
- SQL语句内做除法得出百分比
保留两位小数点 SELECT ROUND(CAST(field1 AS DOUBLE)/field2, 2) * 100 FROM TB; 不保留 SELECT CAST(field1 AS FLOA ...
- python全栈开发,Day1(python介绍,变量,if,while)
python基础一 一,Python介绍 python的出生与应用 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为 ...
- Confluence 6 应该如何在我的空间中组织内容
页面和博客 你在 Confluence 中创建的任何内容,从会议记录到回顾和任何中间的内容,不管来源是博客和页面. 你的主页将是任何访问你网站中的用户首先看到的内容.为了让用户更加容易的找到他们需要查 ...