QQ登录

只需一步,快速开始

4.上位机VC MFC浮动菜单的实现

[ 复制链接 ]
浮动菜单的实现

功能展示
•在许多应用软件中,菜单都具有浮动功能,例如在WORD中,用户可以将菜单手动到任意位置,当前实例我们实现这一功能,效果如右图

4.上位机VC MFC浮动菜单的实现

4.上位机VC MFC浮动菜单的实现


要点提示
•在文档/视窗结构的应用程序中,默认情况下,工具栏具有拖动菜单的功能,如果在用户单击工具栏按钮时,能够弹出一个快捷菜单,就可以实现一个浮动的菜单了,如何确定用户是否单击了工具栏按钮?可以通过mainframe类中添加 TBN_DROPDOWN,通知消息映射宏为实现,ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,OnToolbarDropDown),这样,当用户单击工具栏按钮时,就会调用 自定义的OnToolbarDropDown(),,在该方法中可以获得用户单击的工具栏按钮ID的按钮的客户区域,根据ID加载相应的菜单项实现功能

功能实现
•1.新建一个单文档应用程序
•2.调用例程中CFloatMenu类
•的FloatMenu.CPP和FloatMenu.h
•其中AddButtonFromMenu()根据系统菜单添加工具栏按钮
•BOOLCFloatMenu::AddButtonFromMenu(UINT IDresource)
•{

•  CMenu Menu ;
•  if (Menu.LoadMenu(IDresource))
•  {
•  //获取菜单顶层菜单数
•  UINT ButtonCount = Menu.GetMenuItemCount();
•  UINT * array = new UINT[ButtonCount];
•  CString text;
&#8226;  for (UINT n = 0; n<ButtonCount;n++)
&#8226;  {
&#8226;  array[n]=ID_BUTTON1 +n;
&#8226;  }
&#8226;  SetButtons(array,ButtonCount);
&#8226;  for (UINT i=0;i<ButtonCount;i++)
&#8226;  {
&#8226;  Menu.GetMenuString(i,text,MF_BYPOSITION);
&#8226;  SetButtonText(i,text);
&#8226;  SetButtonStyle(i,TBSTYLE_DROPDOWN);  
&#8226;  }
&#8226;  delete array;
&#8226;  Menu.DestroyMenu();
&#8226;  return true;
&#8226;  }
&#8226;  else
&#8226;  return FALSE;
&#8226;}
&#8226;GetIndexFromPoint()根据光标,确定工具栏按钮索引
UINT CFloatMenu::GetIndexFromPoint(CPoint pot)
{
  CRect rect;
  for (int i =0;i< GetToolBarCtrl().GetButtonCount()-1;i++)
  {
  GetItemRect(i,rect);
  if(rect.PtInRect(pot))
  return i;
  }
  return -1;
}
&#8226;最后在框架类中添加消息映射
&#8226;ON_NOTIFY(TBN_DROPDOWN,AFX_IDW_TOOLBAR,OnToolbarDropDown)
&#8226;ON_COMMAND_RANGE(ID_BUTTON1,ID_BUTTON1+5,OnMenuTreat)
&#8226;并实现OnToolbarDropDown() OnMenuTreat()两函数

&#8226;具体如何操作,我们打开编程软件,简单讲解源码的阅读和功能的实现



源码及视频教程下载(仅电脑上可见):
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:4.上位机VC MFC浮动菜单的实现.rar 
文件大小:866.41 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!






回复

使用道具 举报

快速回复 返回列表 客服中心 搜索