VC编程练习之API笔记(五)—动态菜单的制作

来源:互联网 发布:centos iso镜像下载64 编辑:程序博客网 时间:2024/04/30 05:26

1、  添加动态菜单并相应消息函数:

(1)、进入resource.h文件添加动态生成的菜单的ID号:

      #define    IDM_TEST1     001

(2)、进入MainFrame.h添加响应菜单项函数的声明:

      afx_msg void OnTest1();

(3)、进入MainFrame.cpp添加响应函数的消息映射:

      ON_COMMAND(IDM_TEST1,OnTest1)//将菜单ID和响应函数进行消息映射

(4)、到OnCreate()函数中添加动态菜单生成的代码:

     CMenu menu;     menu.CreatePopupMenu();//创建弹出菜单,返回值非零创建成功     GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"Test");//添加菜单     menu.AppendMenu(MF_STRING,IDM_TEST1,"Test1");//添加子菜单     menu.Detach();

(5)、在OnTest1()中添加动态菜单被按下时的处理:    

  void CMainFrame::OnTest1()     {        MessageBox("This is a Test!");     }

2、  扩展:利用键盘输入并在文档中输出,按下回车键创建动态菜单,单击动态生成的菜单在文档中将相应的文本输出:

//响应键盘输入的消息:WM_CHARvoid CCMenu_11View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {// TODO: Add your message handler code here and/or call defaultCClientDC dc(this);if(0x0d==nChar)//判断是否是回车键按下{if(0==++m_nIndex){          m_menu.CreatePopupMenu();//创建弹出菜单   GetParent()->GetMenu()->AppendMenu(MF_POPUP, (UINT)m_menu.m_hMenu,"Show"); //菜单属于框架类,所以先取得其父窗口的指针   GetParent()->DrawMenuBar();//重绘菜单栏}m_menu.AppendMenu(MF_STRING,IDM_SHOW1+m_nIndex,m_strLine.Left(m_strLine.Find(" ")));//添加子菜单m_strArray.Add(m_strLine);m_strLine.Empty();        Invalidate();//使整个窗口客户区无效,窗口客户无效即需要重绘}else{m_strLine+=nChar;dc.TextOut(0,0,m_strLine);//回显输入的字符}CView::OnChar(nChar, nRepCnt, nFlags);}//响应动态菜单处理的函数void CCMenu_11View::OnShow1() {// TODO: Add your command handler code hereCClientDC dc(this);dc.TextOut(0,0,m_strArray.GetAt(0));}
1 0
原创粉丝点击