热门文章 | 热门软件| 热门源码 | 热门电影 | 知识库 | 联系我们
软件 源码 教程 影视 健康 招聘
  HTML | JavaScript | ASP | PHP | JSP | NET | VB | VC | VF | Windows | Linux | Mysql | Mssql | Oracle | Struts 
当前位置: 创世纪计算机资源网 -> 文章频道 ->vc 
站内搜索:
用VC制作带弹出式菜单的按钮(2)
作者:风林 来源:vchelp 整理日期:2007-10-18

  四、自定义接口函数

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

//设置关联菜单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()接口函数。

  五、变量的初始化

  在CMenuButton类的头文件中,定义有以下变量和函数:

MenuButton.h

private:
 int m_State; //按钮状态
 BOOL b_InFlag; //鼠标进入标志
 BOOL b_ClickFlag; //单击选择区
 BOOL b_ClickBut; //单击主体区
 CString m_strText; //按钮文字
 COLORREF m_ForeColor; //文本颜色
 COLORREF m_BackColor; //背景色
 CRect m_ButRect; //按钮尺寸
 CRect m_LRect; //按钮左部尺寸
 CRect m_RRect; //按钮右部尺寸
 CMenu m_Menu; //弹出菜单
 int m_MenuID; //菜单ID

void DrawButton(CDC *pDC); //绘制按钮

public:
 CMenuButton(); //构造函数
 void SetMenuID(int nID); //设置关联菜单ID
 void SetForeColor(COLORREF color); //设置文本颜色
 void SetBkColor(COLORREF color); //设置背景颜色
 void SetText(CString str); //设置按钮文本
 BOOL isClick(); //是否单击主按钮区

  各变量的初始化在构造函数中进行:

CMenuButton::CMenuButton()
{
 m_MenuID = 0; //菜单ID
 b_InFlag = false; //进入标志
 m_State = 0; //初始状态
 b_ClickFlag = false; //单击选择区标志
 b_ClickBut = false; //单击主体区标志
 m_strText = _T(""); //按钮文本
 m_ForeColor = RGB(0,0,0); //文字颜色
 m_BackColor = GetSysColor( COLOR_3DFACE ); //背景色
}

  这样,带菜单的按钮类就做好了,用它定义的按钮实例可以连接一个弹出式按钮,下面们就看看怎样定义按钮实例。

  六、生成按钮实例

  1、在对话框中放置按钮,把它的大小调整合适;

  2、用ClassWizard为按钮添加变量,把变量的类型设置为CMenuButton;

  3、定义按钮的关联菜单

  关联菜单就是普通的弹出式菜单,用VC的菜单编辑器生成即可。

  进入资源的“Menu”项,插入一个新的菜单,根据需要添加菜单项。

  4、设置按钮

  在对话框的OnInitial()函数中初始化按钮:

  按钮变量.SetMenuID( 菜单ID );
  按钮变量.SetText( 按钮文本 );
  按钮变量.SetBkColor( 按钮背景色 );

  七、按钮的响应

  对按钮的响应包括单击按钮主体区的响应和单击菜单项的响应两部分。

  用ClassWizard添加按钮的响应函数和各菜单项的响应函数。

  在按钮的响应函数中要做如下工作:

void CMBTestView::OnMenubutton1()
{
 if( m_MenuButton1.isClick() )
 {
  //响应按钮操作
 }
}

  这里要求只有单击按钮的主体区时才进行响应。

  至于单击菜单项的响应与普通菜单一样,这里不再详述。
  四、自定义接口函数

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

//设置关联菜单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()接口函数。

  五、变量的初始化

  在CMenuButton类的头文件中,定义有以下变量和函数:

MenuButton.h

private:
 int m_State; //按钮状态
 BOOL b_InFlag; //鼠标进入标志
 BOOL b_ClickFlag; //单击选择区
 BOOL b_ClickBut; //单击主体区
 CString m_strText; //按钮文字
 COLORREF m_ForeColor; //文本颜色
 COLORREF m_BackColor; //背景色
 CRect m_ButRect; //按钮尺寸
 CRect m_LRect; //按钮左部尺寸
 CRect m_RRect; //按钮右部尺寸
 CMenu m_Menu; //弹出菜单
 int m_MenuID; //菜单ID

void DrawButton(CDC *pDC); //绘制按钮

public:
 CMenuButton(); //构造函数
 void SetMenuID(int nID); //设置关联菜单ID
 void SetForeColor(COLORREF color); //设置文本颜色
 void SetBkColor(COLORREF color); //设置背景颜色
 void SetText(CString str); //设置按钮文本
 BOOL isClick(); //是否单击主按钮区

  各变量的初始化在构造函数中进行:

CMenuButton::CMenuButton()
{
 m_MenuID = 0; //菜单ID
 b_InFlag = false; //进入标志
 m_State = 0; //初始状态
 b_ClickFlag = false; //单击选择区标志
 b_ClickBut = false; //单击主体区标志
 m_strText = _T(""); //按钮文本
 m_ForeColor = RGB(0,0,0); //文字颜色
 m_BackColor = GetSysColor( COLOR_3DFACE ); //背景色
}

  这样,带菜单的按钮类就做好了,用它定义的按钮实例可以连接一个弹出式按钮,下面们就看看怎样定义按钮实例。

  六、生成按钮实例

  1、在对话框中放置按钮,把它的大小调整合适;

  2、用ClassWizard为按钮添加变量,把变量的类型设置为CMenuButton;

  3、定义按钮的关联菜单

  关联菜单就是普通的弹出式菜单,用VC的菜单编辑器生成即可。

  进入资源的“Menu”项,插入一个新的菜单,根据需要添加菜单项。

  4、设置按钮

  在对话框的OnInitial()函数中初始化按钮:

  按钮变量.SetMenuID( 菜单ID );
  按钮变量.SetText( 按钮文本 );
  按钮变量.SetBkColor( 按钮背景色 );

  七、按钮的响应

  对按钮的响应包括单击按钮主体区的响应和单击菜单项的响应两部分。

  用ClassWizard添加按钮的响应函数和各菜单项的响应函数。

  在按钮的响应函数中要做如下工作:

void CMBTestView::OnMenubutton1()
{
 if( m_MenuButton1.isClick() )
 {
  //响应按钮操作
 }
}

  这里要求只有单击按钮的主体区时才进行响应。

  至于单击菜单项的响应与普通菜单一样,这里不再详述。
[1]  [2]  
相关文章