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
11
namespace
sw
12
{
16
struct
MenuItemDesc
//
17
{
19
uint64_t
tag
= 0;
20
22
std::wstring
text
{};
23
25
bool
enabled
=
true
;
26
28
bool
checked
=
false
;
29
31
HBITMAP
hBitmap
=
NULL
;
32
34
List<MenuItemDesc>
subItems
{};
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
69
class
MenuItem
:
public
FrameworkElement
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
:
112
const
ReadOnlyProperty<int>
Id
;
113
119
const
ReadOnlyProperty<HMENU>
Handle
;
120
125
const
Property<std::wstring>
Text
;
126
130
const
Property<bool>
Enabled
;
131
135
const
Property<bool>
IsChecked
;
136
140
const
Property<HBITMAP>
Bitmap
;
141
145
const
ReadOnlyProperty<bool>
IsSeparator
;
146
150
const
Property<uint64_t>
Tag
;
151
152
private
:
157
MenuItem
(
const
MenuItemDesc
&
desc
);
158
159
public
:
163
virtual
~MenuItem
();
164
169
static
MenuItem
*
Create
(
const
MenuItemDesc
&
desc
);
170
175
static
MenuItem
*
CreateRoot
(
bool
isPopup
);
176
177
protected
:
181
virtual
void
OnTagChanged
()
override
;
182
183
public
:
188
virtual
MenuItem
*
GetParent
()
const
override
final
;
189
194
virtual
int
GetChildCount
()
const
override
final
;
195
201
virtual
MenuItem
&
GetChildAt
(
int
index)
const
override
final
;
202
208
MenuItem
*
AddChild
(
const
MenuItemDesc
&
desc
);
209
217
MenuItem
*
InsertChild
(
int
index,
const
MenuItemDesc
&
desc
);
218
224
bool
RemoveChildAt
(
int
index);
225
231
bool
RemoveChild
(
MenuItem
*
child
);
232
236
void
ClearChildren
();
237
243
int
IndexOf
(
MenuItem
*
child
)
const
;
244
249
void
ResetChildren
(std::
initializer_list
<
MenuItemDesc
>
descs
);
250
256
MenuItem
*
FindChildById
(
int
id
);
257
263
MenuItem
*
FindChildByTag
(
uint64_t
tag);
264
269
MenuItemDesc
CopyDescTree
()
const
;
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
}
sw::FrameworkElement
框架元素类,提供数据上下文和绑定功能
Definition
FrameworkElement.h:37
sw::FrameworkElement::FrameworkElement
FrameworkElement()
初始化FrameworkElement
sw::IValueConverter
值转换器接口
Definition
IValueConverter.h:14
sw::MenuItem
菜单项类
Definition
MenuItem.h:70
sw::MenuItem::IsChecked
const Property< bool > IsChecked
菜单项是否选中
Definition
MenuItem.h:135
sw::MenuItem::FindChildById
MenuItem * FindChildById(int id)
查找对应ID的子菜单项
sw::MenuItem::OnTagChanged
virtual void OnTagChanged() override
当Tag更改时调用此函数
sw::MenuItem::GetParent
virtual MenuItem * GetParent() const override final
获取逻辑树中的父元素
sw::MenuItem::Handle
const ReadOnlyProperty< HMENU > Handle
菜单项句柄
Definition
MenuItem.h:119
sw::MenuItem::GetChildAt
virtual MenuItem & GetChildAt(int index) const override final
获取逻辑树中指定索引处的子元素
sw::MenuItem::CopyDescTree
MenuItemDesc CopyDescTree() const
获取菜单项描述信息的副本
sw::MenuItem::AddChild
MenuItem * AddChild(const MenuItemDesc &desc)
向当前菜单项添加一个子菜单项
sw::MenuItem::Enabled
const Property< bool > Enabled
菜单项是否可用
Definition
MenuItem.h:130
sw::MenuItem::Tag
const Property< uint64_t > Tag
菜单项Tag
Definition
MenuItem.h:150
sw::MenuItem::RemoveChildAt
bool RemoveChildAt(int index)
移除指定索引处的子菜单项
sw::MenuItem::Id
const ReadOnlyProperty< int > Id
菜单项Id
Definition
MenuItem.h:112
sw::MenuItem::RemoveChild
bool RemoveChild(MenuItem *child)
移除指定子菜单项
sw::MenuItem::ClearChildren
void ClearChildren()
移除所有子菜单项
sw::MenuItem::IsSeparator
const ReadOnlyProperty< bool > IsSeparator
菜单项是否为分隔符
Definition
MenuItem.h:145
sw::MenuItem::Bitmap
const Property< HBITMAP > Bitmap
菜单项位图
Definition
MenuItem.h:140
sw::MenuItem::Create
static MenuItem * Create(const MenuItemDesc &desc)
创建一个新的菜单项实例
sw::MenuItem::ResetChildren
void ResetChildren(std::initializer_list< MenuItemDesc > descs)
重置子菜单项列表
sw::MenuItem::FindChildByTag
MenuItem * FindChildByTag(uint64_t tag)
查找对应tag的子菜单项
sw::MenuItem::InsertChild
MenuItem * InsertChild(int index, const MenuItemDesc &desc)
向当前菜单项的指定索引处插入一个子菜单项
sw::MenuItem::Text
const Property< std::wstring > Text
菜单项文本
Definition
MenuItem.h:125
sw::MenuItem::~MenuItem
virtual ~MenuItem()
析构函数
sw::MenuItem::CreateRoot
static MenuItem * CreateRoot(bool isPopup)
创建一个新的根菜单项实例
sw::MenuItem::GetChildCount
virtual int GetChildCount() const override final
获取逻辑树中的子元素数量
sw::MenuItem::IndexOf
int IndexOf(MenuItem *child) const
获取指定子菜单项在当前菜单项中的索引
sw
SimpleWindow框架的顶级命名空间,所有公共类型、控件、枚举和工具函数均定义于此。
Definition
Alignment.h:4
sw::MenuItemDesc
菜单项描述结构体
Definition
MenuItem.h:17
sw::MenuItemDesc::MenuItemDesc
MenuItemDesc(uint64_t tag, const std::wstring &text)
构造指定标记和文本的菜单项描述
sw::MenuItemDesc::text
std::wstring text
菜单项文本,若为"-"且没有子项则被视为分隔符
Definition
MenuItem.h:22
sw::MenuItemDesc::subItems
List< MenuItemDesc > subItems
子菜单项列表
Definition
MenuItem.h:34
sw::MenuItemDesc::MenuItemDesc
MenuItemDesc(uint64_t tag, const std::wstring &text, std::initializer_list< MenuItemDesc > subItems)
构造指定标记、文本和子项的菜单项描述
sw::MenuItemDesc::checked
bool checked
菜单项是否选中,默认为false
Definition
MenuItem.h:28
sw::MenuItemDesc::MenuItemDesc
MenuItemDesc(const std::wstring &text)
构造指定文本的菜单项描述
sw::MenuItemDesc::MenuItemDesc
MenuItemDesc(const wchar_t *text)
构造指定文本的菜单项描述
sw::MenuItemDesc::MenuItemDesc
MenuItemDesc()=default
默认构造函数
sw::MenuItemDesc::hBitmap
HBITMAP hBitmap
菜单项位图句柄,默认为NULL
Definition
MenuItem.h:31
sw::MenuItemDesc::MenuItemDesc
MenuItemDesc(const std::wstring &text, std::initializer_list< MenuItemDesc > subItems)
构造指定文本和子项的菜单项描述
sw::MenuItemDesc::enabled
bool enabled
菜单项是否可用,默认为true
Definition
MenuItem.h:25
sw::MenuItemDesc::tag
uint64_t tag
菜单项标记,可用于区分不同菜单项
Definition
MenuItem.h:19
sw
inc
MenuItem.h
制作者
1.9.8