SimpleWindow
载入中...
搜索中...
未找到
FileDialog.h
1#pragma once
2
3#include "EnumBit.h"
4#include "IDialog.h"
5#include "List.h"
6#include "Property.h"
7#include <windows.h>
8
9namespace sw
10{
14 enum class FileDialogFlags : DWORD {
29 AllowMultiSelect = 0x00000200,
30
36 CreatePrompt = 0x00002000,
37
41 DontAddTorecent = 0x02000000,
42
44 EnableHook = 0x00000020,
45
50 EnableIncludeNotify = 0x00400000,
51
56 EnableSizing = 0x00800000,
57
63 EnableTemplate = 0x00000040,
64
70 EnableTemplateHandle = 0x00000080,
71
81 Explorer = 0x00080000,
82
85 ExtensionDifferent = 0x00000400,
86
91 FileMustExist = 0x00001000,
92
95 ForceShowHidden = 0x10000000,
96
98 HideReadOnly = 0x00000004,
99
104 LongNames = 0x00200000,
105
108 NoChangeDir = 0x00000008,
109
112 NoDereferenceLinks = 0x00100000,
113
116 NoLongNames = 0x00040000,
117
119 NoNetworkButton = 0x00020000,
120
122 NoReadOnlyReturn = 0x00008000,
123
128 NoTestFileCreate = 0x00010000,
129
137 NoValidate = 0x00000100,
138
141 OverwritePrompt = 0x00000002,
142
145 PathMustExist = 0x00000800,
146
149 ReadOnly = 0x00000001,
150
156 ShareAware = 0x00004000,
157
161 ShowHelp = 0x00000010,
162 };
163
167 _SW_ENUM_ENABLE_BIT_OPERATIONS(FileDialogFlags);
168
176 std::wstring name;
177
181 std::wstring filter;
182
186 std::wstring defaultExt;
187 };
188
193 {
194 private:
198 std::vector<wchar_t> _buffer;
199
203 std::vector<std::wstring> _defaultExts;
204
205 public:
209 FileFilter() = default;
210
214 FileFilter(std::initializer_list<FileFilterItem> filters);
215
222 bool AddFilter(const std::wstring &name, const std::wstring &filter, const std::wstring &defaultExt = L"");
223
229 int SetFilter(std::initializer_list<FileFilterItem> filters);
230
234 void Clear();
235
239 wchar_t *GetFilterStr();
240
244 const wchar_t *GetDefaultExt(int index);
245 };
246
250 class FileDialog : public IDialog
251 {
252 private:
256 OPENFILENAMEW _ofn{};
257
261 std::vector<wchar_t> _buffer;
262
266 std::wstring _title;
267
271 std::wstring _initialDir;
272
276 FileFilter _filter;
277
278 public:
283
288
293
298
303
308
313
318
323
324 public:
329
334 void SetFilter(const FileFilter &filter);
335
339 virtual void Close() override;
340
344 virtual void Show() override;
345
350 virtual int ShowDialog(Window *owner = nullptr) override = 0;
351
356 virtual int ShowDialog(Window &owner) = 0;
357
358 protected:
363
367 wchar_t *GetBuffer();
368
373
378 virtual void ProcessFileName(std::wstring &fileName);
379 };
380
385 {
386 public:
391
396 virtual int ShowDialog(Window *owner = nullptr) override;
397
402 virtual int ShowDialog(Window &owner) override;
403 };
404
409 {
410 private:
414 std::wstring _initialFileName;
415
416 public:
421
426
431 virtual int ShowDialog(Window *owner = nullptr) override;
432
437 virtual int ShowDialog(Window &owner) override;
438
439 protected:
444 virtual void ProcessFileName(std::wstring &fileName) override;
445
446 private:
450 void _SetInitialFileName();
451 };
452}
“打开文件”对话框与“另存为”对话框的基类
Definition FileDialog.h:251
FileDialog()
初始化FileDialog
const Property< int > FilterIndex
当前筛选器的索引,索引值从0开始
Definition FileDialog.h:307
const Property< bool > MultiSelect
是否允许多选
Definition FileDialog.h:317
const ReadOnlyProperty< sw::List< std::wstring > > FileNames
所有选中的文件路径
Definition FileDialog.h:322
const ReadOnlyProperty< FileFilter * > Filter
筛选器
Definition FileDialog.h:302
const Property< std::wstring > Title
对话框标题,设为空字符串可显示默认标题
Definition FileDialog.h:292
void SetFilter(const FileFilter &filter)
设置筛选器
const Property< int > BufferSize
储存文件名的缓冲区大小,值不能小于MAX_PATH
Definition FileDialog.h:282
virtual int ShowDialog(Window &owner)=0
显示对话框,并指定所有者窗口
void ClearBuffer()
清空缓冲区,显示对话框前必须调用此函数
virtual void ProcessFileName(std::wstring &fileName)
处理文件路径,获取文件路径时会先调用这个函数对返回值进行处理
const ReadOnlyProperty< std::wstring > FileName
选中文件的路径
Definition FileDialog.h:312
virtual void Show() override
FileDialog默认不支持该函数,调用该函数不会执行任何操作
virtual void Close() override
FileDialog默认不支持该函数,调用该函数不会执行任何操作
OPENFILENAMEW * GetOFN()
获取OPENFILENAMEW指针
const Property< std::wstring > InitialDir
初始目录
Definition FileDialog.h:297
wchar_t * GetBuffer()
获取指向缓冲区的指针
const Property< FileDialogFlags > Flags
对话框标志
Definition FileDialog.h:287
virtual int ShowDialog(Window *owner=nullptr) override=0
显示对话框,并指定所有者窗口
文件筛选器
Definition FileDialog.h:193
int SetFilter(std::initializer_list< FileFilterItem > filters)
清空现有筛选器并重新设置筛选器
FileFilter()=default
默认构造函数
bool AddFilter(const std::wstring &name, const std::wstring &filter, const std::wstring &defaultExt=L"")
添加筛选器
const wchar_t * GetDefaultExt(int index)
获取指定索引处筛选器的默认扩展名
void Clear()
清空所有已添加的筛选器
FileFilter(std::initializer_list< FileFilterItem > filters)
初始话并设置筛选器
wchar_t * GetFilterStr()
获取OPENFILENAMEW结构体lpstrFilter格式的字符串
对话框接口
Definition IDialog.h:11
值转换器接口
Definition IValueConverter.h:14
“打开文件”对话框
Definition FileDialog.h:385
OpenFileDialog()
初始化OpenFileDialog
virtual int ShowDialog(Window *owner=nullptr) override
显示对话框,并指定所有者窗口
virtual int ShowDialog(Window &owner) override
显示对话框,并指定所有者窗口
“另存为”对话框
Definition FileDialog.h:409
virtual int ShowDialog(Window *owner=nullptr) override
显示对话框,并指定所有者窗口
virtual int ShowDialog(Window &owner) override
显示对话框,并指定所有者窗口
const Property< std::wstring > InitialFileName
初始文件名
Definition FileDialog.h:420
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:14
@ 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:172
std::wstring name
文本
Definition FileDialog.h:176
std::wstring defaultExt
默认扩展名,当SaveFileDialog用户没有填写扩展名时会使用该值作为扩展名
Definition FileDialog.h:186
std::wstring filter
筛选器字符串,有多个类型时用分号分隔
Definition FileDialog.h:181