SimpleWindow
载入中...
搜索中...
未找到
MenuItem.h
1#pragma once
2
3#include "FrameworkElement.h"
4#include "List.h"
5#include <cstdint>
6#include <initializer_list>
7#include <memory>
8#include <string>
9#include <windows.h>
10
11namespace sw
12{
16 struct MenuItemDesc //
17 {
20
22 std::wstring text{};
23
25 bool enabled = true;
26
28 bool checked = false;
29
32
35
37 MenuItemDesc() = default;
38
41 MenuItemDesc(const wchar_t *text);
42
45 MenuItemDesc(const std::wstring &text);
46
50 MenuItemDesc(const std::wstring &text,
51 std::initializer_list<MenuItemDesc> subItems);
52
56 MenuItemDesc(uint64_t tag, const std::wstring &text);
57
62 MenuItemDesc(uint64_t tag, const std::wstring &text,
63 std::initializer_list<MenuItemDesc> subItems);
64 };
65
70 {
71 private:
75 using TBase = FrameworkElement;
76
81 MenuItemDesc _desc{};
82
86 HMENU _hMenu = NULL;
87
91 int _id = -1;
92
96 bool _isRoot = false;
97
101 MenuItem *_parent = nullptr;
102
106 std::vector<std::unique_ptr<MenuItem>> _subItems{};
107
108 public:
113
120
126
131
136
141
146
151
152 private:
157 MenuItem(const MenuItemDesc &desc);
158
159 public:
163 virtual ~MenuItem();
164
170
176
177 protected:
181 virtual void OnTagChanged() override;
182
183 public:
189
195
202
209
218
224 bool RemoveChildAt(int index);
225
232
237
244
250
257
264
270
271 private:
275 void _ResetMenuItem();
276
280 void _UpdateState();
281
288 static void _SetParent(MenuItem *parent, MenuItem *child, int index = -1);
289
294 static int _GenerateMenuItemID();
295
301 static void _ApplyMenuDesc(const MenuItemDesc &desc, MENUITEMINFOW *pMii);
302
309 static void _UpdateMenuItem(HMENU hParentMenu, int index, const MenuItemDesc &desc);
310 };
311}
框架元素类,提供数据上下文和绑定功能
Definition FrameworkElement.h:37
FrameworkElement()
初始化FrameworkElement
值转换器接口
Definition IValueConverter.h:14
菜单项类
Definition MenuItem.h:70
const Property< bool > IsChecked
菜单项是否选中
Definition MenuItem.h:135
MenuItem * FindChildById(int id)
查找对应ID的子菜单项
virtual void OnTagChanged() override
当Tag更改时调用此函数
virtual MenuItem * GetParent() const override final
获取逻辑树中的父元素
const ReadOnlyProperty< HMENU > Handle
菜单项句柄
Definition MenuItem.h:119
virtual MenuItem & GetChildAt(int index) const override final
获取逻辑树中指定索引处的子元素
MenuItemDesc CopyDescTree() const
获取菜单项描述信息的副本
MenuItem * AddChild(const MenuItemDesc &desc)
向当前菜单项添加一个子菜单项
const Property< bool > Enabled
菜单项是否可用
Definition MenuItem.h:130
const Property< uint64_t > Tag
菜单项Tag
Definition MenuItem.h:150
bool RemoveChildAt(int index)
移除指定索引处的子菜单项
const ReadOnlyProperty< int > Id
菜单项Id
Definition MenuItem.h:112
bool RemoveChild(MenuItem *child)
移除指定子菜单项
void ClearChildren()
移除所有子菜单项
const ReadOnlyProperty< bool > IsSeparator
菜单项是否为分隔符
Definition MenuItem.h:145
const Property< HBITMAP > Bitmap
菜单项位图
Definition MenuItem.h:140
static MenuItem * Create(const MenuItemDesc &desc)
创建一个新的菜单项实例
void ResetChildren(std::initializer_list< MenuItemDesc > descs)
重置子菜单项列表
MenuItem * FindChildByTag(uint64_t tag)
查找对应tag的子菜单项
MenuItem * InsertChild(int index, const MenuItemDesc &desc)
向当前菜单项的指定索引处插入一个子菜单项
const Property< std::wstring > Text
菜单项文本
Definition MenuItem.h:125
virtual ~MenuItem()
析构函数
static MenuItem * CreateRoot(bool isPopup)
创建一个新的根菜单项实例
virtual int GetChildCount() const override final
获取逻辑树中的子元素数量
int IndexOf(MenuItem *child) const
获取指定子菜单项在当前菜单项中的索引
SimpleWindow框架的顶级命名空间,所有公共类型、控件、枚举和工具函数均定义于此。
Definition Alignment.h:4
菜单项描述结构体
Definition MenuItem.h:17
MenuItemDesc(uint64_t tag, const std::wstring &text)
构造指定标记和文本的菜单项描述
std::wstring text
菜单项文本,若为"-"且没有子项则被视为分隔符
Definition MenuItem.h:22
List< MenuItemDesc > subItems
子菜单项列表
Definition MenuItem.h:34
MenuItemDesc(uint64_t tag, const std::wstring &text, std::initializer_list< MenuItemDesc > subItems)
构造指定标记、文本和子项的菜单项描述
bool checked
菜单项是否选中,默认为false
Definition MenuItem.h:28
MenuItemDesc(const std::wstring &text)
构造指定文本的菜单项描述
MenuItemDesc(const wchar_t *text)
构造指定文本的菜单项描述
MenuItemDesc()=default
默认构造函数
HBITMAP hBitmap
菜单项位图句柄,默认为NULL
Definition MenuItem.h:31
MenuItemDesc(const std::wstring &text, std::initializer_list< MenuItemDesc > subItems)
构造指定文本和子项的菜单项描述
bool enabled
菜单项是否可用,默认为true
Definition MenuItem.h:25
uint64_t tag
菜单项标记,可用于区分不同菜单项
Definition MenuItem.h:19