也不知道发生什么事情,CSDN把我的文章弄到首页,结果有不少说我在误人子弟,是啊,我去年就说过了,如果你要成为砖家级人物,请远离我的博客,我这个人没什么特长,唯一厉害的一点就是不相信权威,鄙视砖家,所以,我一直以来都有属于俺自己的编程思想。
就好比当年咏春拳刚浮出江湖的时候,武学界骂声不停,有人说:“这哪像拳?分明是女人拳。”然后不知道什么时候,一位叫叶问的大侠突然牛B起来了,于是,咏春拳的传播速度比其他拳种更快,都传到老外那里去了。
所以,为了继续误人子弟,我决定把这些文章写下去,直到误尽天下苍生为止。
我们当然知道,现在,在实际开发中肯定不会像我这样写Win32程序的,你看,连个WinMain都要N行代码。但很多人不明白什么叫学习,什么叫探索。实际上,通常能用于实际开发中的技巧只是占我们对客观世界的认识总和不到20%,所以,如果你有兴趣计算一下,估计有80%的知识你不知道用到哪里去了。就算我们今后不会把Win32程序投入到实际操作中,然而如果你了解过这东西,你会发现很多时候对我们是有帮助的。
哪怕只是简单认识一下Win32的一些原理,相信对于日后编程的学习和成长,是有益处的。
为了提高误人子弟的效果,上面我说了几段F话,下面开始今天的正题。
要在窗口上添加菜单,当然你可能会研究出N种方法,不过,这里我说两种,一种相当复杂,另一种稍微简单。
方法一,用代码添加菜单
这种方法的思路是:首先在全局范围内定义一个HMENU的变量,用来保存窗口中菜单栏的句柄,根菜单(菜单栏)可以CreateMenu函数来创建,接着可以使用AppendMenu函数或者InsertMenuItem函数来创建菜单项。
句柄就是内存中各种资源的ID,比如图标,图片,字符串等。我们的菜单也是一种资源。
下面我写了一个函数,用来动态创建菜单。
void CreateMyMenu()
{
hRoot = CreateMenu();
if(!hRoot)
return;
HMENU pop1 = CreatePopupMenu();
AppendMenu(hRoot,
MF_POPUP,
(UINT_PTR)pop1,
L"操作");
// 一种方法是使用AppendMenu函数
AppendMenu(pop1,
MF_STRING,
IDM_OPT1,
L"飞机");
// 另一种方法是使用InsertMenuItem函数
MENUITEMINFO mif;
mif.cbSize = sizeof(MENUITEMINFO);
mif.cch = 100;
mif.dwItemData = NULL;
mif.dwTypeData = L"机关枪";
mif.fMask = MIIM_ID | MIIM_ST