请问该发什么消息?具体参数是什么?由于某种原因,我不想直接调用treeview控件的nodeclick事件过程,而是想通过发消息来模拟用户点击了一个节点,来使这个事件过程被触发。我试了如下代码出错,说对象不支持该属性或方法:Call SendMessage(tre1.hwnd, WM_NOTIFY, tre1, NM_CLICK)
我还试过向treeview控件的父窗体发消息,也出错,说:您为这个属性输入的设置无效。Call SendMessage(父窗体.hwnd, WM_NOTIFY, tre1, NM_CLICK)

解决方案 »

  1.   

    一,使用PostMessage试下.   鼠标键盘消息都不是即时返回的,而是投递方式.二,如沙发所说,你这第三个参数是啥东西?三,你的代码环境,工作环境等什么都没有说明,想直接让别人给你一个可用的代码而不需要你自己调试,这种可能性你自己估计一下.四,BS老魏又抢沙发.
      

  2.   

    不明白你想要干什么 如果是针对自己编写的程序,想进一步灵活控制的话,你可以进行子类化。怎么做都行!如果针对其他进程的话,就比较复杂了,你可以先发送一个TVM_SELECTITEM消息
    测试一下是否能触发事件,如果不能的话,就需要模拟鼠标操作
      

  3.   


    是这样,我是在VBA里编程。VBA里扩展类不是那么直截了当的。我现在想扩展treeview控件。我就做了个类,类里含有withevents的treeview对象变量。这样,我只要对这个类对象的treeview成员对象变量的事件过程编程,所有的和这个类关联的treeview控件的事件过程就都可以省了。比如,nodeclick事件,我只要在我自己的类里写一次事件过程就行了。不过,有时候还需要一些特别的处理,这就需要这个事件不仅在我自己的类里得到通用处理,而且在包含treeview控件的窗体里得到特别处理,就是需要为同一个事件在两处写两个事件过程,但也不都是这样的情况。不管怎样吧,反正nodeclick事件通过这种事件机制我是能解决的。不过,麻烦的是,有时候,我在程序里需要模拟一下nodeclick事件,就不能简单地通过调用nodeclick事件过程来处理,你也看到了,因为有可能存在多个事件过程,不一定需要调几个。所以需要直接触发nodeclick事件,这就是我的问题的缘起……对发消息我很不在行,后来我放弃了,用的这个方法:http://blog.csdn.net/slowgrace/archive/2009/01/14/3772557.aspx
      

  4.   

    ::SendMessage(m_TreeCtrl.m_hWnd, TVM_SETIMAGELIST, (WPARAM)TVSIL_NORMAL,
                (LPARAM)himl);
    我是这样发送成功的。