SimpleWindow
载入中...
搜索中...
未找到
MenuItem.h
1#pragma once
2
3#include "Delegate.h"
4#include "ITag.h"
5#include <Windows.h>
6#include <initializer_list>
7#include <memory>
8#include <string>
9#include <vector>
10
11namespace sw
12{
13 class MenuItem; // 向前声明
14
18 using MenuItemCommand = Action<MenuItem &>;
19
23 class MenuItem : public ITag
24 {
25 public:
29 uint64_t tag;
30
34 std::wstring text;
35
40
44 std::vector<std::shared_ptr<MenuItem>> subItems{};
45
46 public:
51 MenuItem(const std::wstring &text);
52
58 MenuItem(const std::wstring &text, const MenuItemCommand &command);
59
65 MenuItem(const std::wstring &text, std::initializer_list<MenuItem> subItems);
66
71 MenuItem(uint64_t tag, const std::wstring &text);
72
78 MenuItem(uint64_t tag, const std::wstring &text, const MenuItemCommand &command);
79
86 template <typename T>
87 MenuItem(const std::wstring &text, T &obj, void (T::*handler)(MenuItem &))
88 : MenuItem(0, text, obj, handler)
89 {
90 }
91
98 template <typename T>
99 MenuItem(uint64_t tag, const std::wstring &text, T &obj, void (T::*handler)(MenuItem &))
100 : MenuItem(tag, text, MenuItemCommand(obj, handler))
101 {
102 }
103
104 public:
108 bool IsSeparator() const;
109
114
118 virtual uint64_t GetTag() const override;
119
123 virtual void SetTag(uint64_t tag) override;
124 };
125}
Definition Delegate.h:21
Tag接口
Definition ITag.h:11
菜单项
Definition MenuItem.h:24
std::wstring text
菜单项的文本,当值为“-”时表示当前项为分隔条
Definition MenuItem.h:34
bool IsSeparator() const
获取一个值,表示当前菜单项是否为分隔条
virtual uint64_t GetTag() const override
获取Tag
void CallCommand()
调用command
MenuItem(uint64_t tag, const std::wstring &text)
构造一个MenuItem,并设置tag及文本
MenuItemCommand command
菜单项被单击时调用的函数
Definition MenuItem.h:39
MenuItem(const std::wstring &text)
构造一个MenuItem,并设置文本
MenuItem(uint64_t tag, const std::wstring &text, const MenuItemCommand &command)
构造一个MenuItem,并设置tag及回调函数
uint64_t tag
储存用户自定义信息
Definition MenuItem.h:29
MenuItem(uint64_t tag, const std::wstring &text, T &obj, void(T::*handler)(MenuItem &))
构造一个MenuItem,设置成员函数为回调函数
Definition MenuItem.h:99
MenuItem(const std::wstring &text, T &obj, void(T::*handler)(MenuItem &))
构造一个MenuItem,设置成员函数为回调函数
Definition MenuItem.h:87
virtual void SetTag(uint64_t tag) override
设置Tag
std::vector< std::shared_ptr< MenuItem > > subItems
子项
Definition MenuItem.h:44
MenuItem(const std::wstring &text, std::initializer_list< MenuItem > subItems)
构造一个MenuItem,并设置其子项
MenuItem(const std::wstring &text, const MenuItemCommand &command)
构造一个MenuItem,并设置其回调函数