2013-05-01 92 views
0

我在Details模式下有一個VB6列表視圖,顯示X個項目。我想要創建某種自動高度函數,根據指定的寬度和項目數來評估高度。WinApi:計算ListView高度

下面的代碼沒有工作:

Public Declare Function MessageSend Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 

Public Const LVM_FIRST As Long = &H1000 
Public Const LVM_APPROXIMATEVIEWRECT As Long = (LVM_FIRST + 64) 

Public Sub GetAutoWidth(lvw as ListView) 
    result = MakeLPAram(-1, 0) 
    MessageSend lvw.hWnd, LVM_APPROXIMATEVIEWRECT, -1&, result 
    lvw.height = loWord(result) * Screen.TwipsPerPixelX 
End Sub 

Public Function LoWord(value As Long) As Long 
    LoWord = (value And &HFFFF&) 
End Function 

Public Function MakeLPAram(wLow As Long, wHigh As Long) As Long 
    MakeLPAram = MakeLong(wLow, wHigh) 
End Function 

Public Function MakeLong(wLow As Long, wHigh As Long) As Long 
    MakeLong = LoWord(wLow) Or (&H10000 * LoWord(wHigh)) 
End Function 

誰能幫助我?

+1

它怎麼不起作用? – Deanna 2013-05-01 12:53:35

+0

返回65535爲低字,0爲hi字。 – user884248 2013-05-01 13:04:02

+0

請根據變量的值重新評論您的評論。 – 2013-05-01 23:00:13

回答

1

首先,你不救LVM_APPROXIMATEVIEWRECT的信息在這裏的返回值:

MessageSend lvw.hWnd, LVM_APPROXIMATEVIEWRECT, -1&, result 

您應爲返回值,就是爲什麼你在第一時間發送消息:

返回值

返回保存的大致寬度(在LOWORD)的DWORD值 和高度(在HIWORD)需要顯示的項目,以像素爲單位。

其次,你的命名(GetAutoWidth)你的問題的,標題( 「計算ListView的高度」),和你的代碼(lvw.height = loWord(result) * Screen.TwipsPerPixelX)是頗不一致。

三,閱讀下面的MSDN文章爲您包裝/拆包字和雙字的代碼有缺陷,太:

How to Mimic HIWORD, LOWORD, HIBYTE, LOBYTE C Macros in VB

How To Package HiWord/LoWord Values Into a Long Parameter

+0

謝謝 - 你幫了我很多! – user884248 2013-05-03 22:14:35