免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
改變ComboBox中ListBox的寬度
改變ComboBox中ListBox的寬度

作者: cww 

  我們知道ComboBox是由一個EditBox(TextBox)和ListBox所組成,當我們按ComBox右方的

向下鍵,便能出現(xiàn)ListBox,內(nèi)有許多的選項給我們選,而該ListBox的寬度,是和ComboBox

的度相同,而這個程式使之可以放寬,以容更多的字。

  原本這看來似乎也沒麼什麼困難,只要取得該ListBox的hWnd便可以使用MoveWindow來更

動大小,可是問題就是在ListBox中hwnd的取得。我有一篇文章提到取得ComboBox 中Edit

Box的hwnd,(詳見如何攔截ComboBox的mouse右鍵),使用的是EnumChildWindows來做,

但是,取得ListBox的方式則不然,因為這ListBox是屬於DeskTopWindow的,所以無法由

EnumChildWindows找子Window來做,而只好由ComboBox收到WM_CTLCOLORLISTBOX的訊息

時,lParam便是該ListBox的hWnd上面著手,因而有以下的作法。

注釋:以下在.bas

Type RECT

Left As Long

Top As Long

Right As Long

Bottom As Long

End Type

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _

(ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _

(ByVal hwnd As Long, ByVal nIndex As Long) As Long

Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _

(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _

ByVal wParam As Long, ByVal lParam As Long) As Long

Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Const WM_CTLCOLORLISTBOX = &H134

Public Const GWL_WNDPROC = (-4)

Public preWinProc As Long

Private hwndList As Long

Private EverChange As Boolean

Public AddOnWidth As Long

Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _

ByVal wParam As Long, ByVal lParam As Long) As Long

注釋:以下程式會設(shè)定ListBox的大小,再將之送往原來的Window Procedure

If Msg = WM_CTLCOLORLISTBOX Then

注釋:請?zhí)幚鞰ouse Move的動作

If Not EverChange Then

Dim rect5 As RECT

hwndList = lParam 注釋:當收到WM_CTLCOLORLISTBOX時,lParam是ListBox的hwmd

EverChange = True

Call GetWindowRect(hwndList, rect5)

x = rect5.Left

y = rect5.Top

dx = rect5.Right - rect5.Left + AddonWidth

dy = rect5.Bottom - rect5.Top

Call MoveWindow(hwndList, x, y, dx, dy, 1)

End If

End If

注釋:將之送往原來的Window Procedure

wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)

End Function

注釋:以下程式在Form1, form1中有一Combo1

Sub Form_Load()

Dim ret As Long

AddonWidth = 50 注釋:設(shè)定ComboBox中ListBox的寬度加50 Pixel

注釋:記錄原本的Window Procedure的位址

preWinProc = GetWindowLong(Combo1.hwnd, GWL_WNDPROC)

注釋:設(shè)定Combo1的window Procedure到wndproc

ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, AddressOf wndproc)

End Sub

Private Sub Form_Unload(Cancel As Integer)

Dim ret As Long

注釋:取消Message的截取,而使之又只送往原來的Window Procedure

ret = SetWindowLong(Combo1.hwnd, GWL_WNDPROC, preWinProc)

End Sub

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ListBox和ComboBox
VB的熱鍵技巧的終結(jié)篇(轉(zhuǎn))
[VB API]如何為一個應用程序設(shè)定多個熱鍵?
動態(tài)創(chuàng)建菜單,添加菜單,執(zhí)行自己的菜單事件
如何在msflexgrid中可以使用鼠標滾輪來滾動瀏覽數(shù)據(jù)
VB入門技巧N例(1)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服