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

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;   
    //作我们要做的事情
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值