CMJ Posted June 14, 2011 Posted June 14, 2011 How do I determine which control is sending the message in GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")? I have a GUI with two TreeViews and I need to act on a double click in one treeview but ignore all other double clicks. Even more specifically I need to act only if the double click is a child in Treeview1. For Example if I have Tree1: Parent1 Child1 Child2 Child3 Parent2 Child1 Child2 I want to act on a Double Click but only if it is on one of the Children. Here is a _WM_Notify function that works...EXCEPT it it acts on every double click in the window. Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $tStruct = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;int Item", $lParam) If @error Then Return Switch DllStructGetData($tStruct, "Code") Case $NM_DBLCLK ;some function EndSwitch EndFunc I have read everything I can about QUIRegisterMsg but I am just having a hard time getting my head around it. Thanks in advance for any help. cj
guinness Posted June 14, 2011 Posted June 14, 2011 (edited) Have a look at the example _GUICtrlTreeView_Create() in the Help File, this will give you a working example of how to use WM_NOTIFY. Edited June 14, 2011 by guinness UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
CMJ Posted June 14, 2011 Author Posted June 14, 2011 Thanks guinness for the wuick reply. Shortly after I posted this I saw this comment in the GUIRegisterMsg Wiki: Local $iIDFrom = BitAND($wParam, 0xFFFF) ; LoWord - this gives the control which sent the message I had read this several times and assumed that it meant that it gave the id of the treeview item. It seems as if it actually gives the handle of the selected control - Tree1 in my case - which is exactly what I want. Here is the function and it seems to work properly. Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $tStruct = DllStructCreate("hwnd hWndFrom;int IDFrom;int Code;int Item", $lParam) Local $iIDFrom = BitAND($wParam, 0xFFFF) If @error Then Return If $iIDFrom = $Tree1 and _GUICtrlTreeView_Level($Tree1, _GUICtrlTreeView_GetSelection($Tree1)) > 0 Then Switch DllStructGetData($tStruct, "Code") Case $NM_DBLCLK someFunction() EndSwitch EndIf EndFunc Thanks again cj
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now