您的位置:首页 > 运维架构

CToolBar和SetTimer结合实现类似PhotoShop - pallet的延迟菜单输出效果

2005-10-13 19:59 597 查看
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;
    //作我们要做的事情
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: