右键菜单的实现(类)

HTREEITEM m_hItem;
 CXMLView* m_hWnd;
 void DisplayMenu();
private:
 CBitmap m_AddMap;
 CBitmap m_DelMap;
void CRightClick::DisplayMenu()
{
 m_hWnd = (CXMLView*)(((CMainFrame*)AfxGetMainWnd())->GetActiveView());
 
 CPoint pt;
 CPoint pt1;
 GetCursorPos(&pt); //读取滑鼠的坐标
 GetCursorPos(&pt1);
 m_hWnd->ScreenToClient(&pt); //将给定点或显示器上矩形的屏幕坐标转换为客户坐标

 CMenu PopMenu;
 PopMenu.CreatePopupMenu();

 UINT uFlags;
 m_hItem = m_hWnd->GetTreeCtrl().HitTest(pt, &uFlags);
 
 if ((m_hItem != NULL) && (TVHT_ONITEM &uFlags))
 {
  m_hWnd->GetTreeCtrl().SetFocus(); //要求输入焦点
  //选择,在视中滚动,或重画一个指定的tree view项, TVGN_CARET 设置给定项的选择
  m_hWnd->GetTreeCtrl().Select(m_hItem,TVGN_CARET);
  m_hWnd->GetFocus();

  //设置了4层嵌套
  HTREEITEM ItemRoot, Item1, Item2, Item3, Item4;
  
  ItemRoot = m_hWnd->GetTreeCtrl().GetParentItem(m_hItem);
  Item1 = m_hWnd->GetTreeCtrl().GetParentItem(m_hItem);
  Item2 = m_hWnd->GetTreeCtrl().GetParentItem(Item1);
  Item3 = m_hWnd->GetTreeCtrl().GetParentItem(Item2);
  Item4 = m_hWnd->GetTreeCtrl().GetParentItem(Item3);

  if(!ItemRoot)
  {
   PopMenu.AppendMenu(MF_STRING, ID_MENU_ADD1, "添加区域");
   PopMenu.AppendMenu(MF_STRING, ID_MENU_DELROOT, "删除工程");
  }
  else if(Item4)
  {
   PopMenu.AppendMenu(MF_STRING, ID_MENU_DEL4, "删除计量点");
  }
  else if(Item3)
  {
   PopMenu.AppendMenu(MF_STRING, ID_MENU_ADD4, "添加计量点");
   PopMenu.AppendMenu(MF_STRING, ID_MENU_DEL3, "删除仪表");
  }
  else if(Item2)
  {
   PopMenu.AppendMenu(MF_STRING, ID_MENU_ADD3, "添加仪表");
   PopMenu.AppendMenu(MF_STRING, ID_MENU_DEL2, "删除站场");
  }
  else if(Item1)
  {
   PopMenu.AppendMenu(MF_STRING, ID_MENU_ADD2, "添加站场");
   PopMenu.AppendMenu(MF_STRING, ID_MENU_DEL1, "删除区域");
  }
 }
 else if(m_hItem == NULL && m_flag == TRUE)
 {
  m_hWnd->GetTreeCtrl().SetFocus(); //要求输入焦点
  //选择,在视中滚动,或重画一个指定的tree view项, TVGN_CARET 设置给定项的选择
  m_hWnd->GetTreeCtrl().Select(m_hItem,TVGN_CARET);
  m_hWnd->GetFocus();
  PopMenu.AppendMenu(MF_STRING, ID_MENU_ADDROOT, "创建新工程");
 }
 
 DWORD SelectionMade=PopMenu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD,
 pt1.x,pt1.y,m_hWnd);

 //实现选中的菜单
 switch(SelectionMade)
 {
  case ID_MENU_ADDROOT:
   m_hWnd->GetTreeCtrl().InsertItem("新工程", 0, 1, m_RoothItem, m_RoothItem);
   m_hWnd->GetTreeCtrl().Expand(m_RoothItem, TVE_EXPAND);
   m_flag = FALSE;
   break;
  case ID_MENU_DELROOT:
   m_hWnd->GetTreeCtrl().DeleteItem(m_hItem);
   m_flag = TRUE;
   break;
  case ID_MENU_ADD1:
   m_hWnd->GetTreeCtrl().InsertItem("新区域", m_hItem, m_hItem);
   m_hWnd->GetTreeCtrl().Expand(m_hItem, TVE_EXPAND);
   break;
  case ID_MENU_DEL1:
   m_hWnd->GetTreeCtrl().DeleteItem(m_hItem);
   break;
  case ID_MENU_ADD2:
   m_hWnd->GetTreeCtrl().InsertItem("新站场",m_hItem, m_hItem);
   m_hWnd->GetTreeCtrl().Expand(m_hItem, TVE_EXPAND);
   break;
  case ID_MENU_DEL2:
   m_hWnd->GetTreeCtrl().DeleteItem(m_hItem);
   break;
  case ID_MENU_ADD3:
   m_hWnd->GetTreeCtrl().InsertItem("新流量计",m_hItem, m_hItem);
   m_hWnd->GetTreeCtrl().Expand(m_hItem, TVE_EXPAND);
   break;
  case ID_MENU_DEL3:
   m_hWnd->GetTreeCtrl().DeleteItem(m_hItem);
   break;
  case ID_MENU_ADD4:
   m_hWnd->GetTreeCtrl().InsertItem("新计量点",m_hItem, m_hItem);
   m_hWnd->GetTreeCtrl().Expand(m_hItem, TVE_EXPAND);
   break;
  case ID_MENU_DEL4:
   m_hWnd->GetTreeCtrl().DeleteItem(m_hItem);
   break;
 }
}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 来表示数据库表,使用的实例表示表中的行。 开发者可以定义之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 来表示数据库表,使用的实例表示表中的行。 开发者可以定义之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值