1) 自定义一个类从CToolBar继承
2)响应该类的
OnLButtonDown(UINT nFlags, CPoint point)
OnLButtonUp(UINT nFlags, CPoint point)
消息
3) LButtonDown 中处理 :
a) 通过 GetToolBarCtrl().HitTest(&Pt); 得到单击的 button 的序号
b) 通过 序号和资源id的映射关系设置当前选中的button 资源号
c) 设置 m_bDown 为 TRUE ,该变量表示了鼠标左键被击下
d) 判断如果我们想要的菜单没有显示出来,且我们还没有设置 Timer ,则设置 Timer
如下面的代码
if ( !m_bShow && !m_bTimeSet)
{
m_nTimer = SetTimer(1,4000,NULL);
m_bTimeSet = TRUE;
}
3) LButtonUp 中处理:
a) 设置 m_bDown 为 FALSE ,即鼠标左键提起
b) 判断,如果 没有菜单没有显示,且已经设置了 Timer,则将 Timer 取消,同时不管怎样,将菜
单显示设置为FALSE
if (!m_bShow && m_bTimeSet )
{
KillTimer(m_nTimer);
m_bTimeSet = FALSE;
}
m_bShow = FALSE;
4) OnTimer 函数
如果 鼠标左键击下,且 Timer也被设置
则 显示菜单,将 m_bShow 设置为True ( 避免一直按着鼠标重新设置 Timer )
if ( m_bDown && m_bTimeSet )
{
m_bShow = TRUE;
KillTimer(m_nTimer);
m_bTimeSet = FALSE;
//作我们要做的事情
}
2)响应该类的
OnLButtonDown(UINT nFlags, CPoint point)
OnLButtonUp(UINT nFlags, CPoint point)
消息
3) LButtonDown 中处理 :
a) 通过 GetToolBarCtrl().HitTest(&Pt); 得到单击的 button 的序号
b) 通过 序号和资源id的映射关系设置当前选中的button 资源号
c) 设置 m_bDown 为 TRUE ,该变量表示了鼠标左键被击下
d) 判断如果我们想要的菜单没有显示出来,且我们还没有设置 Timer ,则设置 Timer
如下面的代码
if ( !m_bShow && !m_bTimeSet)
{
m_nTimer = SetTimer(1,4000,NULL);
m_bTimeSet = TRUE;
}
3) LButtonUp 中处理:
a) 设置 m_bDown 为 FALSE ,即鼠标左键提起
b) 判断,如果 没有菜单没有显示,且已经设置了 Timer,则将 Timer 取消,同时不管怎样,将菜
单显示设置为FALSE
if (!m_bShow && m_bTimeSet )
{
KillTimer(m_nTimer);
m_bTimeSet = FALSE;
}
m_bShow = FALSE;
4) OnTimer 函数
如果 鼠标左键击下,且 Timer也被设置
则 显示菜单,将 m_bShow 设置为True ( 避免一直按着鼠标重新设置 Timer )
if ( m_bDown && m_bTimeSet )
{
m_bShow = TRUE;
KillTimer(m_nTimer);
m_bTimeSet = FALSE;
//作我们要做的事情
}