Hi,
ich habe die Window Prozedur von meinem ListView Control abgeleitet um das WM_PAINT event abzufangen um dort dann eine Positionsberechnung+Verschieben von Controls durchzuführen. Allerdings friert die GUI bereits bei einem einfachen Aufruf von _GUICtrlListView_GetItemRectEx($hWnd, $i, $LVIR_BOUNDS) ein. Der Code Auszug enthält nur das nötigste und trotzdem friert mir die GUI ein, hat jemand eine Idee woran das liegt? Durch Minimieren taut es übrigens wieder auf.
Die Idee habe ich von hier:
Embedding Controls in a ListView
#include <GuiListView.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global Const $ODT_LISTVIEW = 102
Global Const $ODA_DRAWENTIRE = 0x1
Global Const $ODA_SELECT = 0x2
Global Const $ODA_FOCUS = 0x4
Global Const $ODS_SELECTED = 0x0001
Global $GUI_main = GUICreate("", 600, 800, -1, -1, -1, $WS_EX_ACCEPTFILES)
Global $hGUI_tab_listview[2][10]
$hGUI_tab_listview[0][0] = GUICtrlCreateListView("", 10, 10, 580, 780, _
BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), _
BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_GRIDLINES)) ; + $LVS_EX_CHECKBOXES + $LVS_SINGLESEL
_GUICtrlListView_AddColumn(-1, "Name")
_GUICtrlListView_AddColumn(-1, "Count")
_GUICtrlListView_AddColumn(-1, "Test")
_GUICtrlListView_AddColumn(-1, "Gih")
For $i = 0 To 10 ; populate the listview for testing purposes
_GUICtrlListView_AddItem(-1, "test " & $i)
_GUICtrlListView_AddSubItem(-1, $i, $i, 1)
_GUICtrlListView_AddSubItem(-1, $i, $i, 2)
_GUICtrlListView_AddSubItem(-1, $i, $i, 3)
Next
Global $lv = GUICtrlGetHandle($hGUI_tab_listview[0][0])
Global $g_hDll = DllCallbackRegister('Proc', 'ptr', 'hwnd;uint;wparam;lparam')
Global $g_hProc1 = _WinAPI_SetWindowLong($lv, $GWL_WNDPROC, DllCallbackGetPtr($g_hDll))
GUISetState(@SW_SHOW)
While 1
Sleep(100)
WEnd
Exit
_WinAPI_SetWindowLong($lv, $GWL_WNDPROC, $g_hProc1)
DllCallbackFree($g_hDll)
Func Proc($hWnd, $iMsg, $wParam, $lParam)
Switch $iMsg
Case $WM_PAINT
;~ ConsoleWrite("$WM_PAINT" & @CRLF)
_WinAPI_CallWindowProc($g_hProc1, $hWnd, $iMsg, $wParam, $lParam)
;~ _WinAPI_DefWindowProc($hWnd, $iMsg, $wParam, $lParam)
For $i = 0 To _GUICtrlListView_GetItemCount($hWnd)-1
Local $struct = _GUICtrlListView_GetItemRectEx($hWnd, $i, $LVIR_BOUNDS)
ConsoleWrite("$i: " & $i & @CRLF)
;~ __MoveControl($oExtCtrls, $hWnd, $i) ; move extended controls
Next
;~ EndIf
EndSwitch
Return _WinAPI_CallWindowProc($g_hProc1, $hWnd, $iMsg, $wParam, $lParam)
EndFunc ;==>_WinProc