偶在CMyStatic(继承CStatic)中做画图,在CMyStatic中添加了水平滚动条和垂直滚动条的消息处理函数,可执行程序后水平和垂直动条都不响应相应的消息,用鼠标点滚动条的哪个地方也点不动,好象是没使能一样,不知怎么回事,望大家帮忙

解决方案 »

  1.   

    看看这个例子里滚动条的实现方法
    http://www.codeguru.com/cpp/controls/listview/backgroundcolorandimage/article.php/c4185/
      

  2.   

    最方便的方法:用CFormView。
    如果想象CScrollView那样做,就只有GetScrollPosition,SetWindowOrg了
      

  3.   

    是不是在CStatic里的滚动消息根本就不能响应呀,但我在界面上已经看到了水平滚动条和垂直滚动条,就是点不动,我在这里设了中断,也进不了
    void CMyStatic::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default
    MessageBox("ok"); CStatic::OnHScroll(nSBCode, nPos, pScrollBar);
    }
      

  4.   

    CStatic缺省是不响应消息的。把静态控件属性中的的NOTIFY选上吧
      

  5.   

    同意鸟人,需要选上notify属性
      

  6.   

    我已经选上了,在画图时是用到鼠标消息的。还有,我的滚动条是这样加的
    BOOL CMyStatic::PreCreateWindow(CREATESTRUCT& cs) 
    {
    // TODO: Add your specialized code here and/or call the base class
    cs.style=cs.style|WS_HSCROLL|WS_VSCROLL;
    return CStatic::PreCreateWindow(cs);
    }我觉得既然窗体能显示出滚动条,就应该能够用它呀
      

  7.   

    我以前也做过类似的事情。不过没有用CStatic自带的滚动条,而是在CStatic控件的右方和下方分别放置一个横向和纵向的滚动条来完成的。
      

  8.   

    是不是首先的设置滚动条的信息。
    typedef struct tagSCROLLINFO {  // si 
        UINT cbSize; 
        UINT fMask; 
        int  nMin; 
        int  nMax; 
        UINT nPage; 
        int  nPos; 
        int  nTrackPos; 
    }   SCROLLINFO; 
    typedef SCROLLINFO FAR *LPSCROLLINFO
    SetScrollInfo( int nBar, LPSCROLLINFO lpScrollInfo, BOOL bRedraw = TRUE );
    你都没有设置它的范围应该不会响应吧?
      

  9.   

    我这样试了一下
    SCROLLINFO  si ;
    si.cbSize = sizeof (si) ;
        si.fMask  = SIF_RANGE | SIF_PAGE ;
        si.nMin   = 0 ;
        si.nMax   = 80;//NUMLINES - 1 ;
        si.nPage  = 20;//cyClient / cyChar ;
        SetScrollInfo (SB_VERT, &si, TRUE) ;
    然后又这样试了一下
    nHScrollMax=1000;//2*m_hScreen;
    nHScrollPos=50;
    SetScrollRange(SB_VERT,0,nHScrollMax,TRUE);
    SetScrollPos(SB_VERT,nHScrollPos);
    //SetScrollInfo
    UpdateWindow();
    都是不行难道就不能用CStatic的滚动条,只能用滚动条控件来,实现滚动功能吗?
      

  10.   

    要选中NOTIFY这个选项的,以前我以碰到过你这样的问题
      

  11.   

    我已经选中了NOTIFY了,可是不行呀,我同样从CEdit类派生了一个类,添加滚动条就行,是不是CStatic类就没有这功能
      

  12.   

    正巧我这几天也刚好碰到这个问题,头都大了,不过功夫不负有心人,我终于算是摸到一些门道,经过翻阅资料,我查到static控件的style加上了SS_NOTIFY也只是能够让它响应有限的几个消息,如下:
    STN_CLICKED
    STN_DBLCLK
    STN_DISABLE
    STN_ENABLE
    WM_CTLCOLORSTATIC 
    所以是不能响应Scrollbar的消息的,也就是说,用style| WS_VSCROLL也只是让滚动条显示出来,而并不能真正的使用它。
    目前我探索的研究方案有两个,都不简单。一种是在CLICK函数中判断鼠标位置与scrollbar位置,自己来模拟这个scroll过程,另一个方案就是上面几个朋友说的在旁边加一个scrollbar控件,然后处理它的滚动消息来改变static的内容。后面这个简单点~不过前面那个对付特殊需要的时候还是有用的,我查阅资料的过程中就发现有人要实现这个功能还要让spy++找不出别的控件~:)
    希望我的劳动让我自己受益的同时也给楼主一些帮助。
      

  13.   

    经常遇到cstatic派生类不响应消息的情况
    不响应paint,mousemove 以及mouseover消息
    以及麻木了:)
      

  14.   

    CStatic也是一个窗口,既然是窗口就有响应消息的权利。
      

  15.   

    我认为不是响应不到WS_VSCROLL,而是CStatic的消息处理过程根本就没有发送这个消息。也就是说,它不认为你点在了滚动条上。你调用EnableScrollBar或ShowScrollBar试一下,我不敢确定可不可以。