乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      改變ComboBox中ListBox的寬度...

       a_cheng 2009-10-22
      改變ComboBox中ListBox的寬度

      作者: cww 

        我們知道ComboBox是由一個EditBox(TextBox)和ListBox所組成,當(dāng)我們按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 注釋:當(dāng)收到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

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約