人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

SENDMESSAGE函數(shù)巧應(yīng)用

SENDMESSAGE函數(shù)巧應(yīng)用

更新時(shí)間:2022-10-13 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

在這一期的SendMessage函數(shù)應(yīng)用中,我將向大家介紹如何利用消息函數(shù)來(lái)擴(kuò)展樹(shù)型列表(TreeView)控件的功能相信對(duì)于樹(shù)型列表控件大家十分的熟悉,典型的應(yīng)用就是Windows資源管理器中的目錄列表。在VB中,樹(shù)型列表控件包含在Microsoft Windows Common Control 6.0(也可能是5.0,視你的VB或者系統(tǒng)版本而定)中。在Windows API中,有一系列的以TVM_ 開(kāi)頭的消息值,這些消息就是擴(kuò)展樹(shù)型列表控件所特定的消息值,下面向大家介紹其中的一些應(yīng)用。
1、設(shè)置樹(shù)型列表控件的背景顏色
首先做如下的定義:
Private Declare Function SendMessage Lib "user32" Alias "Send MessageA" (ByVal hwnd As Long,ByVal wMsg As Long, ByVal wParam As Long,ByVal lParam As Long) As Long
Const TV-FIRST = &H1100
Const TVM-SETBKCOLOR = TV_FIRST + 29
然后再作如下調(diào)用:
Call SendMessage(TreeView1.hwnd, TVM-SETBKCOLOR, 0, RGB(255, 0, 0))
上面的SendMessage調(diào)用將TreeView1的背景顏色設(shè)置為紅色。
大家可能注意到了。在上面的Sendmessage函數(shù)定義中,我們將lParam定義為 ByVal lParam As Long,而不是象前面的那些范例那樣定義為Any或者String類(lèi)型,關(guān)于這個(gè)問(wèn)題,我會(huì)在最后的一章中做介紹。
2、設(shè)置樹(shù)型列表控件標(biāo)題行高度
利用TVM_SETITEMHEIGHT消息可以設(shè)定控件的標(biāo)題行的高度,該消息的定義及調(diào)用方法如下:
定義:
Const TV_FIRST = &H1100
Const TVM-SETITEMHEIGHT = TV_FIRST + 27
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
調(diào)用:
CallSendMessage(TreeView1.hwnd, TVM-SETITEMHEIGHT, 60, 0)
上面的代碼將TreeView1的標(biāo)題行高度設(shè)置到60像素高
3、為樹(shù)型列表控件中不同的標(biāo)題行設(shè)置不同的提示
在第一期的ListBox控件介紹中,我向大家介紹了如何為列表中的每一個(gè)標(biāo)題行設(shè)置不同的提示(ToolTips),在這里為要向大家介紹如何為樹(shù)型列表控件中的每一個(gè)標(biāo)題設(shè)置不同的提示。
同ListBox控件不通,樹(shù)型列表控件中并沒(méi)有根據(jù)光標(biāo)位置獲得標(biāo)題行索引的消息,我們需要另外想辦法。在TVM類(lèi)消息中有一個(gè)TVM_HITTEST消息,發(fā)送該消息可以檢測(cè)控件表面上的某一點(diǎn),如果該點(diǎn)位于一個(gè)標(biāo)題上,則返回該標(biāo)題的句柄。而利用TVM_GETITEM消息,則可以根據(jù)標(biāo)題句柄返回該標(biāo)題行的文本。所以結(jié)合利用這兩個(gè)消息可以獲取光標(biāo)所在標(biāo)題行的標(biāo)題文本。具體的范例代碼如下:
Option Explicit Private Type TPoint
x As Long
y As Long
End Type
Private Type TVHITTESTINFO
pt As TPoint
flags As Long
hItem As Long
End Type
Private Type TVITEM
mask As Long
HTreeItem As Long
state As Long
stateMask As Long
pszText As Long
cchTextMax As Long
iImage As Long
iSelectedImage As Long
cChildren As Long
lParam As Long
End Type
Const TV-FIRST = &H1100
Const TVM_HITTEST = TV-FIRST + 17
Const TVM_GETITEM = TV-FIRST + 12
Const TVHT-ONITEMLABEL = &H4
Const TVIF-TEXT = &H1
Const GMEM-FIXED = &H0
Private Declare Function Send MessageRef Lib"user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As String,ByVal Source As Long,ByVal Length As Long)
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Dim hItemPrv As Long
Private Sub Form_Load()
Dim ndX As Node
`加入若干Item
Set ndX = TreeView1.Nodes.Add(, , "R", "Root")
Set ndX = TreeView1.Nodes.Add("R", tvwChild, "Key1", "Node1")
Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey1", "SubNode1")
Set ndX = TreeView1.Nodes.Add("SubKey1", tvwChild, "SubKeys1", "SubNode1")
Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey2", "SubNode2")
Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey3", "SubNode3")
Set ndX = TreeView1.Nodes.Add("Key1", tvwChild, "SubKey4", "SubNode4")
End Sub
Private Sub TreeView1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
Dim ptA As TPoint
Dim tf As TVHITTESTINFO
Dim tv As TVITEM
Dim hStr As Long
Dim hItem As Long
Dim astr As String * 1024
Dim bstr
On Error GoTo errLab
`獲得當(dāng)前光標(biāo)所在的位置坐標(biāo)
ptA.x = Int(x / Screen.TwipsPerPixelX)
ptA.y = Int(y / Screen.TwipsPerPixelY)
tf.pt = ptA
tf.flags = TVHT_ONITEMLABEL
`獲得光標(biāo)所在的Item的句柄
hItem = SendMessageRef(TreeView1.hwnd, TVM_HITTEST, 0, tf)
`如果未獲得句柄或者同上一次是同一個(gè)Item的句柄則退出
If ((hItem <= 0) Or (hItem = hItemPrv)) Then Exit Sub
hItemPrv = hItem
`分配一定的內(nèi)存空間用以存儲(chǔ)Item的標(biāo)題
hStr = GlobalAlloc(GMEM-FIXED, 1024)
If hStr > 0 Then
tv.mask = TVIF_TEXT
`獲取標(biāo)題文本
tv.HTreeItem = hItem
`Item句柄
tv.pszText = hStr
tv.cchTextMax = 1023
`發(fā)送TVM_GETITEM獲得標(biāo)題文本
CallSendMessageRef(TreeView1.hwnd, TVM-GETITEM, 0, tv)
`將標(biāo)題文本拷貝到字符串a(chǎn)str中
CopyMemory astr, hStr, 1024
bstr = Left$(astr, (InStr(astr, Chr(0)) - 1))
TreeView1.ToolTipText = bstr
`釋放分配的內(nèi)存空間
GlobalFree hStr
End If
Exit Sub
errLab:
Resume Next
End Sub
運(yùn)行上面的程序,當(dāng)光標(biāo)在TreeView1上面移動(dòng)時(shí),TreeView1的ToolTips就會(huì)根據(jù)光標(biāo)所在的不同標(biāo)題行而變動(dòng)。
以上程序在Win98、Win2000,VB6下運(yùn)行通過(guò)

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類(lèi)教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 琼海市| 辉南县| 北川| 宣武区| 玛纳斯县| 宝兴县| 柳河县| 叶城县| 乌审旗| 永登县| 武宣县| 朝阳县| 达日县| 郧西县| 曲阳县| 高要市| 广西| 平乐县| 大荔县| 北安市| 福州市| 德惠市| 青浦区| 孝感市| 北流市| 雷波县| 马公市| 建阳市| 周宁县| 常宁市| 同仁县| 双江| 台中市| 铁岭市| 子洲县| 那坡县| 东宁县| 九龙城区| 吴川市| 内乡县| 山东省|