void CPipeView::OnTbarB()
{
if (m_far<20)
    m_far+=0.1f;
else m_far=20.0f;
DrawScene();
}
以上代码实现按一次m_far变化一次,怎么才能实现按住toolbar上的按钮,m_far持续变化,直到我松开鼠标为止?

解决方案 »

  1.   

    按下后开启一个timer,再发消息之类的
      

  2.   

    OnLMouseClick是什么,具体一点好么
      

  3.   

    我意思是我希望接收的是mousedown事件,然后处理,而不是原来的mouseup事件
      

  4.   

    响应WM_LBUTTONDOWN与WM_LBUTTONUP事件,再加一个定时器处理OnTimer(),在OnLButtonDown中启动定时器,在OnLButtonUp中关闭定时器既可。自加的代码放在OnTimer()中。但是由于工具档是子窗口,有自已的单击鼠标的事件,不能传到View或Frame类中,所以你需要自己从CToolBar类中派生出的一个类,用它来创建工具栏,然后在其中响应LBUTTONDOWN与WM_LBUTTONUP事件。我自己试了一下,是好用的,相关代码如下,count是CMyToolBar成员,整型变量。void CMyToolBar::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    SetTimer(10,50,NULL);
    CToolBar::OnLButtonUp(nFlags, point);
    }void CMyToolBar::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    KillTimer(10);
    count=0;
    CToolBar::OnLButtonUp(nFlags, point);
    }void CMyToolBar::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    if(nIDEvent==10)
    {
    CString strOut;
    count++;
    strOut.Format("%d",count);
    CDC* pDC=GetDC();
    pDC->TextOut(0,0,strOut);
    ReleaseDC(pDC);
    }
    CToolBar::OnTimer(nIDEvent);
    }OnTimer只要count++就可以了。输出是看效果而已。
      

  5.   

    这样可以解决一部分问题,但是若我需要调用View的函数就比较麻烦。特别是ToolBar Button只是希望持续更改当前运行的View类里的一些参数,那怎么解决?
      

  6.   

    自己再解释一下,需要实现这些功能……if (m_far<20)
    m_far+=0.1f;
    else m_far=20.0f;
    DrawScene(); 这些都是View类里的函数和变量