(菜单))
菜单项属性说明ID 标识菜单的唯一常量。Caption 菜单项标题“ 后面的字符为快捷键在菜单项后的字符将加下划线。Separator 水平线其它属性无效。Pop_up 有子菜单Grayed 无效标题以灰色显示Inactive 无效标题正常显示Checked 在标题前加一个对钩break 为None时使它和它的兄弟们一行或一列显示。Help 只对最上层菜单项有效使它及后面的最上层菜单移到窗口的右上角。Prompt 当鼠标指向它时的提示信息多文档应用程序除了生成IDR_MAINFRAME外还生成标识符为IDR_xxxxTYPE其中xxxx为应用程序名。它们分别对应无文档和有文档时。一个菜单id可以在多个类有响应函数但只会有一个响应。我实验得出的结果CChildFrame,CCMenuApp,CCMenuDoc,CCMenuView,CMainFrame(我的应用程序名为CMenu)的响应顺序为在IDR_MAINFRAME中CMainFrame,CCMenuApp其它三个不响应.在IDR_XXXXTYPE 中CCMenuView,CCMenuDoc,CChildFrame,CCMenuApp,CMainFrame.ctrlw打开ClassWizard,选好工程类最常选的是xxxView),在id中选择我们要修改的菜单项。双击COMMAND或UPDATE_COMMAND_UI点确定就可以了。再在成员函数中双击我们刚刚加的函数就可以编辑函数了。当用户单击菜单时我们刚刚编辑的函数会执行。如果我们双击的是UPDATA_COMMAND_UI,则响应形式类似如下void ... OnUpdate...(CCmdUI * pCmdUI){pCmdUI-SetCheck(true);//在菜单项前加一个对钩pCmdUI-Enable(true);// 使菜单项能够使用}因为此函数往往影响到它的外形故在它的“父亲”或“祖父”被选中时就会执行。CWnd类中与菜单有关的几个函数。SetMeun(CMenu *pMenu);修改窗口的菜单为NULL,则表示删除。常用的还有GetMenu();GetSystemMenu();CMenu的一些函数。AppendMenu()函数指定的菜单最后附加一个新菜单项同时可以指定菜单项的相关情况,它有两个语法。nFlag指定状态可以是以下四组之一或相组合而成还可以与MF_POPUP组合表示添加的是弹出式菜单。MF_CHECKED,MF_CHECKEDMF_DISABLED,MF_ENABLED,MF_GRAYEDMF_STRING,MF_OWNERDRAW,MF_SEPARATOR,MF_BITMAP菜单项是字符串自画型分隔线位图。MF_MENUBARBREAK,MF_MENUBREAKnIDNewItem 指定菜单项的id.lpszNewItem指定菜单项的内容与nFlag有关。为MF_OWNERDRAW时该参数为数据指针用来传送数据系统在发送消息WM_MEASUREITEM和WM_DRAWITEM时将该数据存入参数的DRAWITEMSTRUCT结构itemData域nFlag为MF_STRING时该参数为菜单标题。InsertMenunFlags指定菜单项位置和状态状态选项参见AppendMenu()函数位置选项为MF_BYCOMMAND,MF_BYPOSITION.nPositin若为MF_BYCOMMAND,新菜单项插在指定菜单项之前或为MF_BYPOSITION,该参数指定新菜单项的位置为-1插到最后。ModifyMenu()参数与InsertMenu类似。DeleteMenu删除菜单项RemoveMenu移去菜单项设置和显示浮动菜单BOOL TrackPopupMenu(UINT nFlags,int x,int y,CWnd *pWnd,LPCRECT NULL);nFlag浮动式菜单坐标设定方式及鼠标操作方式有效值如下TPM_CENTERALIGN TPM_LEFTALIGN TPM_RIGHTALIGNTPM_LEFTBUTTON TPM_RIGHTBUTTONx,y浮动式菜单坐标pWnd指定操作菜单的窗口lpRect指定鼠标操作范围在客户区单击左键就会弹出快捷菜单方法二需要在资源编辑器中编辑一个新菜单方法三必须有主菜单。方法一void CHeView::OnLButtonDown(UINT nFlags, CPoint point){CMenu PopupMenu;PopupMenu.CreatePopupMenu();PopupMenu.AppendMenu(MF_STRING,ID_FILE_NEW,NEW..);//...ClientToScreen(point);PopupMenu.TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);CView::OnLButtonDown(nFlags, point);}方法二void CHeView::OnLButtonDown(UINT nFlags, CPoint point){CMenu menu;menu.LoadMenu(IDR_DUMMY);CMenu *pMenumenu.GetSubMenu(0);ASSERT(pMenu!NULL);ClientToScreen(point);pMenu-TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);CView::OnLButtonDown(nFlags, point);}方法三void CHeView::OnLButtonDown(UINT nFlags, CPoint point){CWnd *pWndAfxGetApp()-GetMainWnd();CMenu * pMenupWnd-GetMenu();pMenupMenu-GetSubMenu(0);ASSERT(pMenu!NULL);ClientToScreen(point);pMenu-TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);}习题动态菜单用户点击“更多菜单”增加一些菜单项。其实,自画菜单原理不难理解.AppendMenu的风格选自画,将自画用的信息(指针)强制转化成LPCTSTR,再重载DrawItem就行了,注意自画用的信息不要提前delete了.示例如下:COwnerMenu.h中class CMenuItem{public:CString m_szText;COLORREF m_color;CMenuItem(CString szText,COLORREF color){m_szText szText;m_color color;}};#include afxtempl.hclass COwnerMenu : public CMenu{public:void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );bool AppendMenu(UINT nIDNewItem,CString caption,COLORREF color);COwnerMenu();CTypedPtrListCPtrList,CMenuItem * m_MenuList;virtual ~COwnerMenu();};COwnerMenu.cpp中COwnerMenu::~COwnerMenu(){while(m_MenuList.GetCount()){CMenuItem *pMenuItem m_MenuList.GetHead();delete pMenuItem;m_MenuList.RemoveHead();}}bool COwnerMenu::AppendMenu(UINT nIDNewItem, CString caption, COLORREF color){CMenuItem * pMenuItem new CMenuItem(caption,color);m_MenuList.AddTail(pMenuItem);return CMenu::AppendMenu(MF_OWNERDRAW,nIDNewItem,(LPCTSTR)pMenuItem);}void COwnerMenu::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){CDC* pDC CDC::FromHandle(lpDrawItemStruct-hDC);pDC-SetTextColor(((CMenuItem*)lpDrawItemStruct-itemData)-m_color);pDC-TextOut(0,0,((CMenuItem*)lpDrawItemStruct-itemData)-m_szText);}在使用菜单的地方(不要忘记了加头文件):void COwnerMenuView::OnRButtonDown(UINT nFlags, CPoint point){COwnerMenu menu;menu.CreatePopupMenu();menu.AppendMenu(ID_1,1,RGB(0,0,128));ClientToScreen(point);menu.TrackPopupMenu(TPM_LEFTBUTTON|TPM_LEFTALIGN,point.x,point.y,this);CView::OnRButtonDown(nFlags, point);}计算几何为骨排样优化为魂作品一亲士套料工具箱https://qinshi.blog.csdn.net/article/details/167222655作品二亲士CAD工具箱https://qinshi.blog.csdn.net//article/details/156510081经典文章推荐二维排样https://qinshi.blog.csdn.net/article/details/164169163万物皆数学https://qinshi.blog.csdn.net/article/details/143057305查阅鄙人的博文请点击博文下载学院导航https://qinshi.blog.csdn.net/article/details/163717324活到老学到老。明朝中后期大约50%的进士能当上堂官(副部及更高)能当上堂官的举人只有十余人。子墨子言之事无终始无务多业。也就是我们常说的专业的人做专业的事。