赵南为什么打星号:CMenu::TrackPopupMenu、GetSubMenu、AppendMenu函数...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/27 15:26:30

CMenu::TrackPopupMenu、GetSubMenu、AppendMenu函数

BOOL TrackPopupMenu( UINT nFlags, int x, int y, CWnd* pWnd,LPCRECT lpRect = NULL );

返回值:如果成功,则返回非零值,否则为0。

参数: nFlags 指定屏幕位置标志或鼠标键标志。
屏幕位置标志可以为下列值之一: · TPM_CENTERALIGN 使弹出菜单在水平方向相对于x指定的坐标居中。 · TPM_LEFTALIGN 放置弹出菜单,以便弹出菜单在由坐标值x指定的位置左对齐。 · TPM_RIGHTALIGN 放置弹出菜单,以便弹出菜单在由坐标值x指定的位置右对齐。
鼠标键标志可以为下列值之一: · TPM_LEFTBUTTON 导致弹出菜单追踪鼠标左键。 · TPM_RIGHTBUTTON 导致弹出菜单追踪鼠标右键。
x 指定弹出菜单屏幕坐标的水平位置。根据参数nFlags的值,该菜单可以左对齐、右对齐或在该位置上居中。 y 指定弹出菜单屏幕坐标的垂直位置。 pWnd 标识拥有弹出菜单的窗口。该窗口接收来自菜单的所有WM_COMMAND消息。在Windows 3.1或以后版本中,窗口直到TrackPopupMenu返回才接收WM_COMMAND消息。在Windows 3.0中,窗口在TrackPopupMenu返回之前接收WM_COMMAND消息。 lpRect 指向RECT结构或包含矩形的屏幕坐标CRect对象,用户在该矩形内部单击鼠标也不会消除弹出菜单。若该参数为NULL ,那么用户在该矩形外部单击鼠标,弹出菜单将消失。对于Windows 3.0,该值必须为NULL。

在指定位置显示浮动弹出菜单,并追踪弹出菜单中被选择的项。浮动弹出菜单可以出现在屏幕的任何位置。

 

 

API函数  函数功能:该函数取得被指定菜单激活的下拉式菜单或子菜单的句柄。

  函数原型:HMENU GetSubMenu(HMENU hMenu,int nPos);

  参数:

  hMenu:菜单句柄。

  nPos:激活下拉式菜单或子菜单的菜单项相对于零的位置。

  返回值:如果函数调用成功,返回值是菜单项激活的下拉式菜单或子菜单的句柄。如果菜单项没有激活一个下拉式菜单或子菜单,返回值是NULL。

  速查:Windows NT:3.1及以上版本;Wiodows:95及以上版本;Windows CE:1.0及以上版本;头文件:Winuser.h;输入库:user32.lib。

MFC类成员函数

  CMenu::GetSubMenu

  CMenu* GetSubMenu( int nPos ) const;

  返回值:

  若弹出菜单位于指定的位置,则返回CMenu 对象的指针,其中CMenu对象要包含弹出菜单的句柄;否则为NULL。如果CMenu 对象不存在,那么将创建临时的CMenu 对象。但返回的CMenu指针不应被存储。

  参数:

   nPos 指定包含在菜单中的弹出菜单的位置。对于第一个菜单项,位置值开始为0。弹出菜单的标识符不能被该函数使用。

  说明:获取弹出菜单的CMenu对象。

  请参阅:

  CWnd::GetMenu, CMenu::GetMenuItemID, ::GetMenuString

 

CMenu::AppendMenu()

函数功能:该函数在指定的菜单条、下拉式菜单、子菜单或快捷菜单的末尾追加一个新菜单项。此函数可指定菜单项的内容、外观和性能。函数AppendMenu己被lnsertMenultem取代。但如果不需要lnsertMenultem的扩展特性,仍可使用AppendMenu。

  函数原型:BOOL AppendMenu(hMenu hMenu,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);

  参数:

  hMenu:将被修改的菜单条、下拉式菜单、子菜单、或快捷菜单的句柄。

  UFlags:控制新菜单项的外观和性能的标志。此参数可以是备注里所列值的组合。

  UIDNewltem:指定新菜单项的标识符,或者当uFlags设置为MF_POPUP时,表示下拉式菜单或子菜单的句柄。

  LpNewltem:指定新菜单项的内容。此参数的含义取决于参数uFlags是否包含MF_BITMAP, MF_OWNERDRAW或MF_STRING标志,如下所示:

  MF_BITMAP:含有位图句柄。MF_STRING:以`\O’结束的字符串的指针。

  MF_OWNERDRAW:含有被应用程序应用的32位值,可以保留与菜单项有关的附加数据。当菜单被创建或其外观被修改时,此值在消息WM_MEASURE或WM_DRAWITEM的参数IParam指向的结构,成员itemData里。

  返回值:如果函数调用成功,返回非零值;如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。

  备注:一旦菜单被修改,无论它是否在显示窗口里,应用程序必须调用函数DrawMenuBar。

  为了使键盘加速键能控制位留或自己绘制的菜单项,菜单的拥有者必须处理WM_MENUCHAR消息。

  参见自绘制菜单和WM_MENUCHAR消息。

  下列标志可被设置在参数uFlags里:

  MF_BITMAP:将一个位图用作菜单项。参数lpNewltem里含有该位图的句柄。

  MF_CHECKED:在菜单项旁边放置一个选取标记。如果应用程序提供一个选取标记,位图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。

  MF_DISABLED:使菜单项无效,使该项不能被选择,但不使菜单项变灰。

  MF_ENABLED:使菜单项有效,使该项能被选择,并使其从变灰的状态恢复。

  MF_GRAYED:使菜单项无效并变灰,使其不能被选择。

  MF_MENUBARBREAK:对菜单条的功能同MF_MENUBREAK标志。对下拉式菜单、子菜单或快捷菜单,新列和旧列被垂直线分开。

  MF_MENUBREAK:将菜单项放置于新行(对菜单条),或新列(对下拉式菜单、子菜单或快捷菜单)且无分割列。

  MF_OWNERDRAW:指定该菜单项为自绘制菜单项。菜单第一次显示前,拥有菜单的窗口接收一个WM_MEASUREITEM消息来得到菜单项的宽和高。然后,只要菜单项被修改,都将发送WM_DRAWITEM消息给菜单拥有者的窗口程序。

  MF_POPUP:指定菜单打开一个下拉式菜单或子菜单。参数uIDNewltem下拉式菜单或子菜单的句柄。此标志用来给菜单条、打开一个下拉式菜单或于菜单的菜单项、子菜单或快捷菜单加一个名字。

  MF_SEPARATOR:画一条水平区分线。此标志只被下拉式菜单、于菜单或快捷菜单使用。此区分线不能被变灰、无效或加亮。参数IpNewltem和uIDNewltem无用。

  MF_STRING:指定菜单项是一个正文字符串;参数lpNewltem指向该字符串。

  MF_UNCHECKED:不放置选取标记在菜单项旁边(缺省)。如果应用程序提供一个选取标记位图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。

  下列标志组不能被一起使用:

  MF_DISABLED,MF_ENABLED和MF_GRAYED;MF_BITMAP,MF_STRING和MF_OWNERDRAW

  MF_MENUBARBREAK和MF_MENUBREAK;MF_CHECKED和MF_UNCHECKED

  Windows CE环境下,不支持参数fuFlags使用下列标志:

  MF_BITMAP;MF_DOSABLE;MF_GRAYED

  MF_GRAYED可用来代替MF_DISABLED和MFS_GRAYED。

  Windows CE 1.0不支持层叠式菜单。在使用Windows CE 1.0时,不能将一个MF_POPUP菜单插入到另一个下拉式菜单中。Window CE 1.0不支持下列标志:

  MF_POPUP;MF_MENUBREAK;MF_MENUBARBREAK
       Windows CE 2.0或更高版本中,支持上述标志,也支持层叠式菜单。