📄 关于宏定义函数.txt
字号:
#define BEGIN_MENU( name ) \
static const MfwMnuItem name##Items [] = {
#define MENU_ITEM_ICON( icon, extra, msg, handler, attrFunction ) \
{ icon, (void*)extra, 0, (char*) msg, 0, (MenuFunc)handler, attrFunction }
#define MENU_ITEM( msg, handler, attrFunction ) \
{ 0,0,0, (char*) msg, 0, (MenuFunc)handler, attrFunction }
#define END_MENU( name, area, col, extra, style,titleTxtID ) \
}; \
\
static const MfwMnuAttr name = { \
(MfwRect *) &area, style, 0xFF, (MfwMnuItem *) name##Items, sizeof( name##Items ) / sizeof( MfwMnuItem ), col, titleTxtID, NULL, MNUATTRSPARE, extra \
};
.......
BEGIN_MENU( menuBookmarkOptions )
MENU_ITEM_ICON((MfwIcnAttr*)(&list_number_item_icon_1), &list_sec_phbk_extra, TxtGoTo, AUI_bookmarks_goto , item_flag_none ),
MENU_ITEM_ICON((MfwIcnAttr*)(&list_number_item_icon_2), &list_sec_phbk_extra, TxtEditName, AUI_bookmarks_edit , item_flag_none )
END_MENU( menuBookmarkOptions, menuListArea, COLOUR_LIST_SUBMENU, (void*)&mmi_second_level_extra_data, DEF_MENU_STYLE, TxtBookmarkTitle )
不懂这段代码的用法,请赐教
定义了四个类函数宏,把BEGIN_MENU展开,就是:
static const MfwMnuItem menuBookmarkOptionsItems [] = {{(MfwIcnAttr*)(&list_number_item_icon_1),(void*)&list_sec_phbk_extra,0,(char*)TxtGoTo,0,(MenuFunc)AUI_bookmarks_goto,item_flag_none},{(MfwIcnAttr*)(&list_number_item_icon_2),(void*)&list_sec_phbk_extra, 0, (char*)TxtEditName,0,(MenuFunc)AUI_bookmarks_edit,item_flag_none}};static const MfwMnuAttr menuBookmarkOptions = {(MfwRect *) &menuListArea, DEF_MENU_STYLE, 0xFF, (MfwMnuItem *) menuBookmarkOptionsItems, sizeof( menuBookmarkOptionsItems ) / sizeof( MfwMnuItem ), COLOUR_LIST_SUBMENU, TxtBookmarkTitle, NULL, MNUATTRSPARE, (void*)&mmi_second_level_extra_data};
实际上是两条变量定义和初始化,第一条定义了一个静态常量数组menuBookmarkOptionsItems,它有两个元素,分别是{(MfwIcnAttr*)(&list_number_item_icon_1),(void*)&list_sec_phbk_extra,0,(char*)TxtGoTo,0,(MenuFunc)AUI_bookmarks_goto,item_flag_none}和{(MfwIcnAttr*)(&list_number_item_icon_2),(void*)&list_sec_phbk_extra, 0, (char*)TxtEditName,0,(MenuFunc)AUI_bookmarks_edit,item_flag_none},从元素的构成来看,MfwMnuItem应该是一个结构类型。
第二条定义了一个静态常量MfwMnuItem结构变量menuBookmarkOptions,其成员是(MfwRect *) &menuListArea, DEF_MENU_STYLE, 0xFF, (MfwMnuItem *) menuBookmarkOptionsItems, sizeof( menuBookmarkOptionsItems ) / sizeof( MfwMnuItem ), COLOUR_LIST_SUBMENU, TxtBookmarkTitle, NULL, MNUATTRSPARE, (void*)&mmi_second_level_extra_data。
你就把定义给替代一下不就出来了(有时甚至可以把它当成字符替代)
##是连接符,比如这个定义
#define BEGIN_MENU( name ) \
static const MfwMnuItem name##Items [] = {
展开这个
BEGIN_MENU( menuBookmarkOptions )
就是:
static const MfwMnuItem menuBookmarkOptionsItems [] = {
补充:
#是将后面的字符转成字符串
比如 #Hello 转成 "Hello"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -