利用API函式向TreeView控制項傳送訊息

2021-04-26 17:22:50 字數 3000 閱讀 8419

出處:http://blog.csdn.net/slowgrace/archive/2009/04/15/4076404.aspx

1、sendmessage

向treeview控制項傳送訊息通常要用api的sendmessge函式,這需要在標準模組裡新增宣告如下:

'api宣告

public

declare

function

sendmessage lib

"user32

"alias

"sendmessagea

"(byval hwnd

aslong

, byval wmsg

aslong

, byval wparam

aslong

, lparam

asany)

aslong

public

declare

function

sendmessagelong lib

"user32

"alias

"sendmessagea

"(byval hwnd

aslong

, byval wmsg

aslong

, byval wparam

aslong

, byval lparam

aslong

) as

long

這上面兩個宣告,區別只在最後乙個引數。tiger_zhao

說,前一種是自動取位址,通常對應指標型別的引數。後一種直接傳值,通常對應非指標型別的引數。通常,如果msdn 的引數型別有*,就用前一種。而後一種,實際上可以對應於下面這種呼叫: call sendmessage(htvw, tvm_expand, tve_expand, byval hitem)。在這篇文章裡有乙個具體的例子。

2、獲得treeview node對應的hitem

發訊息時,常常需要提供的引數之一是treeview node對應的hitem。可以像下面這樣獲得:

private

function

gethtreeitem(byval nodx

asmscomctllib.node, trex

asmscomctllib.treeview)

aslong

nodx.selected

=true

gethtreeitem

=sendmessage(trex.hwnd, tvm_getnextitem, tvgn_caret, 0)

end function

不過,上面的方法中要改變treeview的當前節點。如果不希望改變當前節點的話,可以參考這篇文章裡的辦法:http://blog.csdn.net/slowgrace/archive/2009/04/16/4083667.aspx

3、向treeview傳送訊息使expand事件發生

call sendmessage(trex.hwnd, tvm_expand, tve_expand, byval gethtreeitem(nodx, trex))

4、向treeview傳送訊息使nodeclick事件發生

在這個帖子裡http://blog.csdn.net/slowgrace/archive/2009/01/14/3772557.aspx,我嘗試了發nm_click通知訊息的辦法,但是不能激發nodeclick事件。

解決的辦法是找到節點的座標,向指定座標傳送滑鼠down和up訊息,參見這篇文章http://blog.csdn.net/slowgrace/archive/2009/04/16/4084299.aspx。不過,這個辦法是投遞訊息,如果需要直接傳送訊息那種效果,暫時還沒找到什麼好辦法。

5、一些常用的工具

spy++可用來實時觀察視窗控制代碼和訊息。apiviewer可用來幫你生成用於vb的api函式宣告、型別宣告、常量宣告。

6、了解和使用api訊息的方法

在http://msdn.microsoft.com/en-us/library/cc656648(vs.85).aspx裡有所有的treeview控制項相關訊息。一般在訊息的說明裡會以**的形式說明相關的引數。**分成兩列,左列是引數列表,右列是注釋。比如像下面這句:

(lparam) lparam

// = (lparam) (htreeitem) hitem

tiger_zhao

解釋說,它說明這個名為lparam的引數的用法。它的型別是(lparam),所以右邊的注釋首先有個(lparam),這是為了與引數型別匹配進行的強制型別轉換,不用管(在vb 中就是long);而(htreeitem) 說明這個引數期待的是乙個控制代碼hitem,控制代碼在vb中也是long。

7、一些常用到的常數

利用API函式獲取系統資訊

我們所編寫的每乙個程式,都會有乙個執行環境的最低需求。如何獲取使用者機器的配置資訊呢?其實,我們可以利用api函式輕鬆實現。我們利用visual c 嚮導生成乙個單文件介面的視窗程式框架。生成乙個新的對話方塊,這個對話方塊用於顯示我們所取得的機器的配置資訊。為這個對話方塊生成乙個新類,命名為csys...

c 之利用API函式實現動畫窗體

這裡主要利用api函式animate window實現窗體左右,上下,擴充套件,淡入滑動或滾動動畫效果,步驟如下 1.新建窗體,使用2個groupbox控制項。2.在控制項1中新增2個radiobutton控制項,並設定text分別為 滾動窗體 滑動窗體 並使前者checked設定為true。3.在...

winform利用API函式獲取系統的資訊

api函式是構築windows應用程式的基石,是windows程式設計的必備利器。每一種windows應用程式開發工具都提供了間接或直接呼叫了windows api函式的方法,或者是呼叫windows api函式的介面,也就是說具備呼叫動態連線庫的能力。visual c 和其它開發工具一樣也能夠呼叫...