字体
第(1/4)页
关灯
   存书签 书架管理 返回目录
    。首先创建一个动态菜单对象,有以

    下两种方法:

    (1)创建一个新的菜单对象

    以下代码创建一个空的弹出式菜单对象:

    CMenucomnu;

    CreatePopupMenu()函数为菜单对comnu 创建一个空的弹出式菜单对象。然后用

    AppendMenu()函数为这个新的菜单对象添加菜单项,例如:

    (2)从资源中装入一个菜单对象

    创建动态菜单对象,还可以直接从资源中装入,而无须在代码中手动添加菜单项。首先

    依照3.2 节中的内容为应用程序工程新创建一个菜单资源,在IDE 主菜单栏中依次选择

    “Insert|Resource”菜单命令,或者使用快捷键Ctrl+R,打开“Insert Resource”对话框,在列

    表框中选择Menu,单击“New”按钮即可创建一个有默认资源ID 为IDR_MENU1 的新的菜

    单资源,并自动进入该菜单的编辑界面,然后添加菜单项。图3-21 给出了一个已经修改好的

    弹出菜单资源的例子。

    图3-21 弹出式菜单资源

    然后编辑视图类的源文件,在已经添加的WM_RBUTTONDOWN 消息处理函数

    OnRButtonDown()中添加如下代码:

    CMenucomnu;

    枫叶文学网www.fywxw.com

    第3 章 菜单与加速键

    ·59·

    CMenu *psubMenucomnu.GetSubMenu(0);

    LoadMenu()函数为CMenu 对象装入菜单资源,其参数为需要装入菜单资源的ID。于是

    psubMenu 就指向了菜单资源IDR_MENU1 里test1 菜单对象,包含test1 菜单中的所有菜单项。

    2.显示并使用弹出式菜单

    在视图类的OnRButtonDown()函数中完成菜单的创建后,就可以根据鼠标光标的位置显

    示弹出式菜单,代码如下:

    CPoint pt;

    GetCursorPos(&pt); //获得鼠标位置

    变comnu 是前一小节的第一部分例子中创建的新的菜单对象。如果使用前一小节第二

    部分从菜单资源中装入的菜单对象psubMenu,也可以用类似的代码显示弹出式菜单。

    GetCursorPos()用于获取鼠标光标位置。TrackPopupMenu()函数在指定位置显示一个浮动

    的弹出式菜单,并跟踪对其菜单项的选择。

    3.销毁弹出式菜单

    弹出式菜单使用完毕后,需要在视图类的OnRButtonDown 中用DestroyMenu()销毁创建

    的菜单,例如:

    这样就完成了整个弹出式菜单的生命周期。

    编译运行程序后,在视图中单击鼠标右键,就可以打开如图3-20 所示的弹出式菜单。

    3.4 创建加速键

    与菜单的创建相比,加速键的创建相对简单。这是因为加速键已经自动绑定到对应的菜

    单项命令消息中,当已经完成菜单项命令消息处理函数的编写时,则按下加速键后会自动产

    生相应的命令消息,并通过相应的消息处理函数完成指定的cāo作。因此用户只需了解
上一章 目录 下一页