SimpleWindow
载入中...
搜索中...
未找到
FileDialog.h
1#pragma once
2
3#include "EnumBit.h"
4#include "IDialog.h"
5#include "ObservableCollection.h"
6#include "Property.h"
7#include <string>
8#include <vector>
9#include <windows.h>
10
11namespace sw
12{
16 enum class FileDialogFlags : DWORD {
31 AllowMultiSelect = 0x00000200,
32
38 CreatePrompt = 0x00002000,
39
43 DontAddTorecent = 0x02000000,
44
46 EnableHook = 0x00000020,
47
52 EnableIncludeNotify = 0x00400000,
53
58 EnableSizing = 0x00800000,
59
65 EnableTemplate = 0x00000040,
66
72 EnableTemplateHandle = 0x00000080,
73
83 Explorer = 0x00080000,
84
87 ExtensionDifferent = 0x00000400,
88
93 FileMustExist = 0x00001000,
94
97 ForceShowHidden = 0x10000000,
98
100 HideReadOnly = 0x00000004,
101
106 LongNames = 0x00200000,
107
110 NoChangeDir = 0x00000008,
111
114 NoDereferenceLinks = 0x00100000,
115
118 NoLongNames = 0x00040000,
119
121 NoNetworkButton = 0x00020000,
122
124 NoReadOnlyReturn = 0x00008000,
125
130 NoTestFileCreate = 0x00010000,
131
139 NoValidate = 0x00000100,
140
143 OverwritePrompt = 0x00000002,
144
147 PathMustExist = 0x00000800,
148
151 ReadOnly = 0x00000001,
152
158 ShareAware = 0x00004000,
159
163 ShowHelp = 0x00000010,
164 };
165
169 _SW_ENUM_ENABLE_BIT_OPERATIONS(FileDialogFlags);
170
178 std::wstring name;
179
183 std::wstring filter;
184
188 std::wstring defaultExt;
189 };
190
194 class FileDialog : public IDialog
195 {
196 private:
200 OPENFILENAMEW _ofn{};
201
205 std::vector<wchar_t> _buffer;
206
210 std::wstring _title;
211
215 std::wstring _initialDir;
216
221 std::vector<wchar_t> _filterBuffer;
222
227
228 public:
233
238
243
248
253
258
263
268
273
274 public:
279
283 virtual void Close() override;
284
288 virtual void Show() override;
289
294 virtual int ShowDialog(Window *owner = nullptr) override = 0;
295
300 virtual int ShowDialog(Window &owner) = 0;
301
302 protected:
307
311 wchar_t *GetBuffer();
312
317
322 virtual void ProcessFileName(std::wstring &fileName);
323
324 private:
329 void _AppendFilterToBuffer(const FileFilterItem &filter);
330
334 void _ResetFilterBuffer();
335
341 void _FiltersCollectionChangedHandler(
343 };
344
349 {
350 public:
355
360 virtual int ShowDialog(Window *owner = nullptr) override;
361
366 virtual int ShowDialog(Window &owner) override;
367 };
368
373 {
374 private:
378 std::wstring _initialFileName;
379
380 public:
385
390
395 virtual int ShowDialog(Window *owner = nullptr) override;
396
401 virtual int ShowDialog(Window &owner) override;
402
403 protected:
408 virtual void ProcessFileName(std::wstring &fileName) override;
409
410 private:
414 void _SetInitialFileName();
415 };
416}
“打开文件”对话框与“另存为”对话框的基类
Definition FileDialog.h:195
FileDialog()
初始化FileDialog
const Property< int > FilterIndex
当前筛选器的索引,索引值从0开始
Definition FileDialog.h:257
const Property< bool > MultiSelect
是否允许多选
Definition FileDialog.h:267
const Property< std::wstring > Title
对话框标题,设为空字符串可显示默认标题
Definition FileDialog.h:242
const ReadOnlyProperty< ObservableCollection< FileFilterItem > * > Filters
筛选器集合
Definition FileDialog.h:252
const Property< int > BufferSize
储存文件名的缓冲区大小,值不能小于MAX_PATH
Definition FileDialog.h:232
virtual int ShowDialog(Window &owner)=0
显示对话框,并指定所有者窗口
void ClearBuffer()
清空缓冲区,显示对话框前必须调用此函数
virtual void ProcessFileName(std::wstring &fileName)
处理文件路径,获取文件路径时会先调用这个函数对返回值进行处理
const ReadOnlyProperty< std::wstring > FileName
选中文件的路径
Definition FileDialog.h:262
virtual void Show() override
FileDialog默认不支持该函数,调用该函数不会执行任何操作
virtual void Close() override
FileDialog默认不支持该函数,调用该函数不会执行任何操作
OPENFILENAMEW * GetOFN()
获取OPENFILENAMEW指针
const Property< std::wstring > InitialDir
初始目录
Definition FileDialog.h:247
const ReadOnlyProperty< List< std::wstring > > FileNames
所有选中的文件路径
Definition FileDialog.h:272
wchar_t * GetBuffer()
获取指向缓冲区的指针
const Property< FileDialogFlags > Flags
对话框标志
Definition FileDialog.h:237
virtual int ShowDialog(Window *owner=nullptr) override=0
显示对话框,并指定所有者窗口
对话框接口
Definition IDialog.h:11
支持集合变更通知的接口
Definition INotifyCollectionChanged.h:61
值转换器接口
Definition IValueConverter.h:14
集合变更事件参数类型
Definition INotifyCollectionChanged.h:33
“打开文件”对话框
Definition FileDialog.h:349
OpenFileDialog()
初始化OpenFileDialog
virtual int ShowDialog(Window *owner=nullptr) override
显示对话框,并指定所有者窗口
virtual int ShowDialog(Window &owner) override
显示对话框,并指定所有者窗口
“另存为”对话框
Definition FileDialog.h:373
virtual int ShowDialog(Window *owner=nullptr) override
显示对话框,并指定所有者窗口
virtual int ShowDialog(Window &owner) override
显示对话框,并指定所有者窗口
const Property< std::wstring > InitialFileName
初始文件名
Definition FileDialog.h:384
virtual void ProcessFileName(std::wstring &fileName) override
处理文件路径,获取文件路径时会先调用这个函数对返回值进行处理
SaveFileDialog()
初始化SaveFileDialog
窗口
Definition Window.h:32
SimpleWindow框架的顶级命名空间,所有公共类型、控件、枚举和工具函数均定义于此。
Definition Alignment.h:4
FileDialogFlags
https://learn.microsoft.com/en-us/windows/win32/api/commdlg/ns-commdlg-openfilenamew
Definition FileDialog.h:16
@ NoReadOnlyReturn
The returned file does not have the Read Only check box selected and is not in a write-protected dire...
@ NoNetworkButton
Hides and disables the Network button.
@ HideReadOnly
Hides the Read Only check box.
文件筛选器信息
Definition FileDialog.h:174
std::wstring name
文本
Definition FileDialog.h:178
std::wstring defaultExt
默认扩展名,当SaveFileDialog用户没有填写扩展名时会使用该值作为扩展名
Definition FileDialog.h:188
std::wstring filter
筛选器字符串,有多个类型时用分号分隔
Definition FileDialog.h:183