比如一个TreeView, 原来没有ScrollBar的, 当某一个节点展开后或者Insert了很多Items以后ScrollBar出现了, 有什么消息通知我ScrollBar已经创建了吗?
我试过在ScrollBar没出现之前用GetScrollBarCtrl()返回的是NULL, 说明ScrollBar不是一开始就创建好的.

解决方案 »

  1.   

    设置Scroll属性为True不就有ScrollBar了。
    也可以在Expand事件中检测GetScrollBarCtrl()的返回值
      

  2.   

    我现在发现, 无论什么时候GetScrollBarCtrl()返回值都是NULL, 到底是怎么回事?
      

  3.   

    CWnd对GetScrollBarCtrl()的实现总是返回NULL,不管你的CWnd是否有ScrollBar(WS_HSCROLL 或 WS_VSCROLL设置为TRUE)。而且在CTreeView中没有复写GetScrollBarCtrl(),只是在CView中有复写如下:CScrollBar* CView::GetScrollBarCtrl(int nBar) const
    {
      ASSERT(nBar == SB_HORZ || nBar == SB_VERT);
      if (GetStyle() & ((nBar == SB_HORZ) ? WS_HSCROLL : WS_VSCROLL))
      { // it has a regular windows style scrollbar (no control)
        return NULL;
      }
      ......
    }如果你的CTreeView没有Splitter或作为sibling的SCrollBarCtrl,这个函数只是返回NULL。关键问题就是我们看到的CTreeView中的那个SCrollBar不被认为是个控件!
      

  4.   

    Try this function:BOOL CWnd::GetScrollInfo( int nBar, LPSCROLLINFO lpScrollInfo, UINT nMask = SIF_ALL );
      

  5.   

    这里找不到你满意的答案吗?来这里试试!
    这里有问必答
    http://systemer.51.net/cgi-bin/leoboard.cgi
    希望你能在这里找到你满意的答案!
      

  6.   

    你用Spy++查一下就知道有什么消息了同意 WM_SIZE
      

  7.   

    有没有什么办法能把ScrollBarCtrl的CScrollBarCtrl对象得到? 在ScrollBarCtrl已经存在的情况下我枚举了CView的所有子窗口都没有找到,难到ScrollBar真的不是一个独立的控件?
      

  8.   

    应该会产生WM_SIZE消息,你试试。