龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

用VC制作带弹出式菜单的按钮(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
VERIFY(m_Menu.LoadMenu(m_MenuID)); //装入菜单资源 CMenu* pPopup = m_Menu.GetSubMenu(0); ASSERT(pPopup != NULL); CWnd* pWndPopupOwner = this; while (pWndPopupOwner-GetStyle() WS_CHILD) pWndPopupO

   VERIFY(m_Menu.LoadMenu(m_MenuID)); //装入菜单资源

   CMenu* pPopup = m_Menu.GetSubMenu(0);
   ASSERT(pPopup != NULL);
   CWnd* pWndPopupOwner = this;

   while (pWndPopupOwner->GetStyle() & WS_CHILD)
    pWndPopupOwner = pWndPopupOwner->GetParent();

   pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, point.x, point.y, pWndPopupOwner); //弹出菜单
  }
  else //再次单击,清除菜单
  {
   m_Menu.Detach();
   m_Menu.DestroyMenu();
  }
 }
 CButton::OnLButtonDown(nFlags, point);
}

  当单击按钮选择区时,在选择区的左下角弹出菜单,函数中的point是鼠标的屏幕坐标,求菜单位置时也使用屏幕坐标。

  m_MenuID是与按钮关联的弹出菜单的ID,它在创建按钮时进行设置。

  OnLButtonUp()函数响应按钮弹起消息,这是只要恢复按钮正常状态即可,以产生单击动画效果。

void CMenuButton::OnLButtonUp(UINT nFlags, CPoint point)
{
 m_State = 0; //恢复为正常按钮
 Invalidate(); //重绘按钮

 CButton::OnLButtonUp(nFlags, point);

 四、自定义接口函数

  提供用户使用按钮的接口。

//设置关联菜单ID
void CMenuButton::SetMenuID(int nID)
{
 m_MenuID = nID;
}

//设置按钮文本
void CMenuButton::SetText(CString str)
{
 m_strText = str;
}

//设置文本颜色
void CMenuButton::SetForeColor(COLORREF color)
{
 m_ForeColor = color;
 Invalidate();
}

//设置背景颜色
void CMenuButton::SetBkColor(COLORREF color)
{
 m_BackColor = color;
 Invalidate();
}

//是否单击主按钮区
BOOL CMenuButton::isClick()
{
 return b_ClickBut;

  由于这种按钮分为两个区域,使用时要根据单击区域决定要做的工作,所以设置了isClick()接口函数。

精彩图集

赞助商链接