1. 创建菜单:
1) 主要利用CMenu的三个成员函数CreateMenu、CreatePopupMenu、AppendMenu、SetMenu创建菜单;
2) BOOL CMenu::CreateMenu();
i. 该函数可以直接创建一个空的顶层菜单栏;
ii. 返回值表示创建是否成功;
iii. 该创建只是内存里的资源的创建,它在创建顶层菜单栏资源的同时将该资源与CMenu对象挂钩起来:
CMenu menuMain;
menuMain.CreateMenu(); // 创建了一个空的顶层菜单栏并将该资源和CMenu对象menuMain挂钩
3) BOOL CMenu::CreatePopupMenu();
i. 该函数也是创建一个菜单,返回值意义等也和CreateMenu一样;
ii. 只不过该函数创建的是一个可弹出的顶层菜单项,同样也是空的,里面没有内容;
4) BOOL CMenu::AppendMenu(UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL);
i. 用于在菜单的末尾处添加一个菜单项;
ii. nFlags:表示添加的项目的类型,以MF_前缀打头,即Menu Flag的缩写,主要有这几项:
MF_STRING:表示加入的是一个普通的具有命令的命令菜单项,此时第三个参数就是该惨淡项上的文本,而第二个参数就是该菜单项的ID;
MF_POPUP:表示加入的是一个顶层菜单项,此时第三个参数就表示该顶层菜单项的文本,但是要注意的是!第二个参数就变成了该顶层菜单项的句柄了!!但是由于第二个参数在原型中已经定义为了UINT型,所以还要对菜单句柄进行强制类型转换,转换成UINT型再传入;
MF_SEPARATOR:表示添加的是一条分界线,此时第二个参数和第三个参数就没意义了,直接取默认值0和NULL即可;
!!注意菜单资源的挂接和挂钩:
a. 挂接是指将顶层菜单栏接在框架窗口上,以及将顶层菜单项接在顶层菜单栏上的过程;
b. 挂钩:也叫绑定,在过去没有面向对象模式之前,菜单资源被创建在内存后特别不方便管理,需要用很多函数去维护,而现在有了CMenu类,就可以将原来一大堆的不方便全部都包装在CMenu对象中了,用户可以不必去面对这些底层的复杂性,因此就叫做菜单资源绑定在CMenu对象中,或者说是菜单资源和CMenu对象挂钩;
c. 通常第一步都是创建资源并挂钩,然后顶层菜单栏通过SetMenu函数挂接到框架窗口上,而顶层菜单项通过AppendMenu挂接到顶层菜单栏中;
d. 但是MFC存在一个大问题,那就是挂