权宜之计003:发个消息真难
想给treeview控件发个消息,以便触发它的nodeclick事件。可是找了N久,也没找到到底该发啥消息。 一、试着发消息 (1)先是找treeview控件的说明,它的所有消息里楞是没有叫nodeclick的消息; (2)然后试着用API的sendmessage函数给父窗体发WM_NOTIFY消息,LPARAM的code取为NM_CLICK。试了半天,也没反应。也不知是目标窗体句柄没整对,还是消息代码没整对。 (3)再当了SPY++,想看看点击节点的时候倒底发了哪些消息,我靠,看得我眼花缭乱。貌似treeview控件外面有个子窗体,这个子窗体套在我以为是treeview控件父窗体的里面。具体这消息该谁发给谁,就够我绕的。 最后,结论是,这个nodeclick事件恐怕不是单一的消息触发的,而是VB里对一些消息做了综合判断,然后触发的。我要通过发消息触发nodeclick事件的话,恐怕得模拟若干条消息才成,想想都头大,于是决定放弃了。 二、自己定义事件 现在的权宜之计,就是自己定义一个事件,在希望nodeclick事件被触发的时候,触发我自己定义的这个事件,权且当作俺自己版本的nodeclick事件了。对了,VB还真得很绝,像这种build-in的事件还不许用RaiseEvent来触发。 唉。真得不大好用。最近看了篇比较C#和VB.net的文章,看得心里瓦凉瓦凉的。反正按那篇文章的意思,如果想编高质量的程序,就得用C#;真正好的VB程序员,也会更喜欢用C#…… 三、问题的缘起 另外,补充说明一下我的问题的缘起。因为这个问题其实有些朋友已问过,看到的解决方案一般都是直接调用Nodeclick事件过程。但是这招不适用于我的情况:是这样,我是在VBA里编程。VBA里扩展类不是那么直截了当的。 四、再次尝试发消息 这几天又在高人的指点下用用发消息,这回貌似成功了,用SPY++可以看到我发的消息,参数貌似都没错。可惜的是,还是无功而返,nodeclick事件还是不会激发。先把发消息的正确代码写在这儿,省得日后忘了:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |