資源描述:
《sendmessage函數(shù)巧應(yīng)用1》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、SendMessage函數(shù)巧應(yīng)用(一)作者:不詳 來源于:中國(guó)VB網(wǎng) 發(fā)布時(shí)間:2005-5-21???在Windows編程中,向文本框控件、列表控件、按鈕控件等是我們最常接觸的控件了。但是在VB中這些控件有時(shí)無法實(shí)現(xiàn)我們的需要。在這時(shí),我們只要簡(jiǎn)單的利用WindowsAPI函數(shù)就可以擴(kuò)充這些控件的功能了。???顧名思義,SendMessage函數(shù)就是向窗口(這里的窗口指的是向按鈕、列表框、編輯框等具有hWnd屬性的控件)發(fā)送消息的函數(shù),該函數(shù)的定義如下:DeclareFunctionSendMessageLib"user32"Alias"SendMessageA"_???????(ByVa
2、lhwndAsLong,_???????ByValwMsgAsLong,_???????ByValwParamAsLong,_???????lParamAsAny)AsLong其中hwnd指定接受消息的窗口,參數(shù)wMsg指定消息值,參數(shù)wParamlParam分別定義傳遞到窗口的附加參數(shù)。而在Windows系統(tǒng)的很多消息中,有一些不僅僅是提供一個(gè)窗口消息那么簡(jiǎn)單。它們可以控制窗口的動(dòng)作和屬性。下面我將分次向向大家介紹SendMessage函數(shù)在擴(kuò)充基本控件功能方面的應(yīng)用。一、列表(ListBox)控件???在Windows中,有一系列的以LB_開頭的列表消息,這里介紹的就是利用LB消息控制的
3、ListBox的應(yīng)用1、使列表中光標(biāo)移動(dòng)到不同的列表項(xiàng)上有不同的提示(ToolTip)???在列表框控件中有一個(gè)ToolTipText屬性,該屬性決定了當(dāng)光標(biāo)在列表框上移動(dòng)時(shí)出現(xiàn)的提示文字。但是如何使得當(dāng)光標(biāo)在不同的列表項(xiàng)上移動(dòng)時(shí)的提示文字也不同呢?問題的關(guān)鍵是要知道在光標(biāo)移動(dòng)時(shí)光標(biāo)所在的列表項(xiàng)的索引,使用SendMessage函數(shù)發(fā)送LB_ITEMFROMPOINT消息就可以獲得。下面是程序范例:OptionExplicitConstLB_ITEMFROMPOINT=&H1A9PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMes
4、sageA"_???????(ByValhwndAsLong,_???????ByValwMsgAsLong,_???????ByValwParamAsLong,_???????lParamAsAny)AsLongPrivateSubForm_Load()???Dimi??????Fori=1To200???????List1.AddItemStr(i)+"Samplesinthislistis"+Str(i)???NextiEndSubPrivateSubList1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)?
5、??DimlXPointAsLong???DimlYPointAsLong???DimlIndexAsLong???IfButton=0Then?'確定在移動(dòng)鼠標(biāo)的同時(shí)沒有按下功能鍵或者鼠標(biāo)鍵???????'獲得光標(biāo)的位置,以像素為單位???????lXPoint=CLng(X/Screen.TwipsPerPixelX)???????lYPoint=CLng(Y/Screen.TwipsPerPixelY)???????'???????WithList1???????????'獲得光標(biāo)所在的標(biāo)題行的索引???????????lIndex=SendMessage(.hwnd,LB_ITEMF
6、ROMPOINT,0,_???????????????ByVal((lYPoint*65536)+lXPoint))???????????'將ListBox的Tooltip設(shè)置為該標(biāo)題行的文本???????????If(lIndex>=0)And(lIndex<=.ListCount)Then???????????????.ToolTipText=.List(lIndex)'Returnthetext=.list(lIndex)???????????Else???????????????.ToolTipText=""???????????EndIf???????EndWith???EndIf
7、EndSub???首先在Form1中加入一個(gè)ListBox控件,然后再將上面的代碼加入到Form1的代碼窗口中。運(yùn)行程序,當(dāng)光標(biāo)在列表中移動(dòng)時(shí),可以看到根據(jù)光標(biāo)所在的不同的列表項(xiàng),提示文字也不相同。2、向列表中加入橫向滾動(dòng)條使得可以瀏覽長(zhǎng)列表項(xiàng)???當(dāng)向列表中加入的列表項(xiàng)超出了列表的顯示范圍后,列表并不會(huì)出現(xiàn)橫向滾動(dòng)條讓你可以通過滾動(dòng)來瀏覽項(xiàng)目的全部?jī)?nèi)容。利用LB_SETHORIZONTALEXTENT消息可