当然,我知道 控件本身有 Expand 事件的,
我只是想问下,如何用自己的SubClass捕捉并分离出TVN_ItemExpanding消息?假设 m_hWnd=From1.TreeView1.hWnd偶试了下:在Function SubClass (uMsg,hWnd,wParam,lParam) 里
Dim uHDR As NMHDR, uNmTV As NMTREEVIEW此时的uHDR.hWndFrom 总是不等于 m_hWnd (idFrom 等于 m_hWnd)
不知为何?难道一定要自建的控件才行吗?
所以,下面的过程总是捉不到事件,诶Select Case uMsg
  Case WM_NOTIFY
    CopyMemory uHDR, ByVal lParam, Len(uHDR)
    If uHDR.hWndFrom <> m_hWnd Then
      Exit Sub
    End If
    Select Case uHDR.Code
      Case TVN_ItemExpanding
        CopyMemory uNmTV, ByVal lParam, LenB(uNmTV)

解决方案 »

  1.   

    //此时的uHDR.hWndFrom 总是不等于 m_hWnd (idFrom 等于 m_hWnd)
    不知为何?难道一定要自建的控件才行吗?没这么一说你把代码贴全另外,这里有完整的代码:
    http://www.vb-helper.com/HowTo/howto_treeview_expanding_collapsing.zip
    你可以对比一下
      

  2.   

    真是奇怪啊,上面的代码是可行的,但为什么偶的代码不行呢?
    会不会是处理子类的代码有误?其它顶级消息好像正常啊(如MouseMove等)
    老大能否帮忙看看,或者能否推荐一种更好的SubClass方法?(偶希望安全性高一点,不要动不动就被Kill了,还有能适合建立多个SubClass的)vOpcode = Array(&H83EC8B55, &HE860F0C4, &H0, &HCEB815B, &H33004010, &HF84589C0, _
      &H8BFC4589, &H4011A08B, &HFC98500, &H9684, &HFFF98300, &HBB8B1174, _
      &H40119C, &HF20C458B, &H80850FAF, &H83000000, &H4011B0BB, &H36740000, _
      &H11B093FF, &HF8830040, &HC72B7502, &H1F845, &H63EB0000, &H1E75C085, _
      &H1194B3FF, &HFC6A0040, &H1190B3FF, &H93FF0040, &H4011AC, &H119883C7, _
      &H40, &H938B0000, &H401198, &H3774D285, &HC085028B, &H253174, _
      &H75800000, &H458D532A, &H458D5014, &H458D5010, &H458D500C, &H458D5008, _
      &H458D50FC, &H8B5250F8, &H2050FF02, &HF87D835B, &H8B850F00, &H53000000, _
      &HFF1475FF, &H75FF1075, &H875FF0C, &H1194B3FF, &H93FF0040, &H4011A8, _
      &HFC45895B, &HF87D83, &H8B8B6875, &H4011A4, &H5E74C985, &H74FFF983, _
      &H9CBB8B16, &H8B004011, &H4011A083, &H873C8D00, &HF20C458B, &H834375AF, _
      &H4011B0BB, &HB740000, &H11B093FF, &HF8830040, &H8B2F7402, &H40119893, _
      &H74D28500, &H85028B25, &H251F74C0, &H80000000, &HFF531875, &H75FF1475, _
      &HC75FF10, &H8D0875FF, &H5250FC45, &H50FF028B, &H7D815B1C, &H820C, _
      &HC7357500, &H40119083, &H0, &H838D00, &H50004010, &HB3FF006A, _
      &H4011B8, &H50F0458D, &H1188838B, &H45890040, &H8C838BF0, &H89004011, _
      &HA3FFF445, &H4011B4, &HFC458B61, &H10C2C9)
      

  3.   

    申明,此代码来自于:
    '*************************************************************************
    '**模 块 名:CSubclass
    '**说    明:Sky Walker(天行者) 版权所有2006 - 2007(C)
    '**        :Portions copyright (c) 2002 by Paul Caton <[email protected]>
    '**        :Portions copyright (c) 2002 by Vlad Vissoultchev <[email protected]>
    '**创 建 人:WQW     Implementation based on the original cSuperClass.cls
    '**日    期:2002-09-28
    '**修 改 人:叶帆
    '**日    期:
    '**描    述:子类化
    '**版    本:V1.0.0
    '*************************************************************************只有这个部分偶实在看不懂,只能拿来用了,希望老大能推荐一个更好的办法,谢谢!
    (偶喜欢封装性强一点的,除了申明常数以外,希望代码都以源码形式存在,这样也方便修改,
    所以最讨厌SSubTmr.Dll的形式了,既要注册,也要引用外部TLB,直接运行时还常常因为版本的问题出错,偶从vbaccelerator下的东东,几乎没有一个Exe能正常运行的,只能看看代码了)
      

  4.   

    Function SubClass&(byval hWnd&,byval uMsg&,byval wParam&,byval lParam&)