Opened 17 years ago
Closed 17 years ago
#104 closed Bug (Fixed)
Problem with _GUICtrlListView_RegisterSortCallBack and WM_NOTIFY
Reported by: | Wooltown <sven.ullstad@…> | Owned by: | Gary |
---|---|---|---|
Milestone: | 3.2.11.1 | Component: | AutoIt |
Version: | 3.2.11.0 | Severity: | |
Keywords: | Cc: |
Description
If you in the same script use _GUICtrlListView_RegisterSortCallBack and WM_NOTIFY just one of them will work, the latest in the code will work.
In the attached example if I put _GUICtrlListView_RegisterSortCallBack first, then WM_NOTIFY will work, if I put WM_NOTIFY first then _GUICtrlListView_RegisterSortCallBack will work. Is there a solution for this ?
Running AutoIt 3.2.11.0 on English Windows 2000 SP4
#AutoIt3Wrapper_au3check_parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiImageList.au3> #include <WindowsConstants.au3> Opt('MustDeclareVars', 1) _Example1() Func _Example1() Local $hImage, $hListView, $aIcons[3] = [0, 3, 6] Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE) Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER) GUICreate("ListView Register Sort Callback", 300, 200) $hListView = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 280, 180, -1, $iExWindowStyle) _GUICtrlListView_SetExtendedListViewStyle($hListView, $iExListViewStyle) ; Load images $hImage = _GUIImageList_Create(18, 18, 5, 3) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -7) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -12) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10) _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11) _GUICtrlListView_SetImageList($hListView, $hImage, 1) _AddRow($hListView, "ABC|000666|10.05.2004", $aIcons) _AddRow($hListView, "DEF|444|11.05.2005", $aIcons, 1) _AddRow($hListView, "CDE|555|12.05.2004", $aIcons, 2) GUISetState() GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events") _GUICtrlListView_RegisterSortCallBack($hListView) ;GUIRegisterMsg($WM_NOTIFY, "WM_Notify_Events") While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd _GUICtrlListView_UnRegisterSortCallBack($hListView) GUIDelete() EndFunc ;==>_Example1 Func WM_Notify_Events($hWndGUI, $MsgID, $wParam, $lParam) #forceref $hWndGUI, $MsgID, $wParam Local $tagNMHDR, $event $tagNMHDR = DllStructCreate("int;int;int", $lParam) ;NMHDR (hwndFrom, idFrom, code) If @error Then Return $event = DllStructGetData($tagNMHDR, 3) Switch $event Case $NM_RCLICK msgbox(0,"WM_NOTIFY","",2) EndSwitch EndFunc Func _AddRow($hWnd, $sItem, $aIcons, $iPlus = 0) Local $aItem = StringSplit($sItem, "|") Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], $aIcons[0] + $iPlus, _GUICtrlListView_GetItemCount($hWnd) + 9999) _GUICtrlListView_SetColumnWidth($hWnd, 0, $LVSCW_AUTOSIZE_USEHEADER) For $x = 2 To $aItem[0] _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1, $aIcons[$x - 1] + $iPlus) _GUICtrlListView_SetColumnWidth($hWnd, $x - 1, $LVSCW_AUTOSIZE) Next EndFunc ;==>_AddRow
Attachments (0)
Change History (4)
comment:1 Changed 17 years ago by Gary
- Owner set to Gary
- Status changed from new to assigned
comment:2 Changed 17 years ago by Gary
There may be another way to have both, If I can work it out it'll be in the next.
comment:3 Changed 17 years ago by Wooltown <sven.ullstad@…>
Found this solution, I don't know about the performance, but it seems simple.
http://www.autoitscript.com/forum/index.php?showtopic=63709&st=0&gopid=475485&#entry475485
comment:4 Changed 17 years ago by Gary
- Milestone set to 3.2.11.1
- Resolution set to fixed
- Status changed from assigned to closed
Fixed in version: 3.2.11.1
Guidelines for posting comments:
- You cannot re-open a ticket but you may still leave a comment if you have additional information to add.
- In-depth discussions should take place on the forum.
For more information see the full version of the ticket guidelines here.
I made this for those that have no knowledge of how to use WM_NOTIFY or callbacks and Simple Sort wasn't enough.
If you need to use WM_NOTIFY for other things then don't use _GUICtrlListView_RegisterSortCallBack.
If this becomes to much of a problem I can always remove it.