Jump to content
Sign in to follow this  
JakeJohnson74

Feeling like I am doing this wrong...

Recommended Posts

JakeJohnson74

Ok, so I feel as though I am programming myself into a corner here. 

The code is a mess currently (but it runs) 

First problem: my _ScreenOffset() is basically being call in line: 189 once. This takes one of my many listviews and establishes its position relative to the client. I then use $aLV_Offset in the message loop on the $GUI_EVENT_MOUSEMOVE in an if statement. 

This was the only way I could figure out how to make an imaginary boundary to capture the listview I was dragging from. (any advice here would be  much appreciated) 

Fixed Second related issue: If the user drags the whole GUI I need to update my $aLV_Offset positions and since its called once at the top - that isn't happening. I need a little nudge on how I would do this? Im thinking about registering WM_MOVE? and if the GUI moves - call my function and refresh its location. Just need a confirmation on that I suppose

Third Issue: I have the drag and drop working on the Listview to the Treeview - but if you look at my Drag and Drop functions (line:379  & 400) you'll see if VERY specific to dragging FROM a list view, TO a treeview. 

This is the biggest hurdle right now as I need dynamic Source and Target code. 

case 1: If source = listview  target = treeview

case 2: if source = treeview  target = listview 

There are 7 list views and 2 tree views. So its very important to me that I target the right listview and the right tree view while dragging and dropping both ways and the two controls don't handle drag and drop the same ways. 

So upon getting a successful drag and drop from the listviews to a treeview, I was happy! Then I thought - hmm, now... the treeview to the list view... CRAP! This is NOT written to handle it at all! 

I have used various examples to get this far. For example there is Treeview / Listview drag and drop code example here, but they are static. the example shows the drag and drop functions hard coded to look at one specific control and move data to another specific control. This is simple - I need something more complex. 

In summary - I would like some advice on best practice as I feel like I am getting into a little longer code here and at this point i feel like I put some time into going the wrong direction! haha. 

 

*Edit - Feel free to dump my include you don't have. LOL I removed the code - but didn't remove the include. DatabaseConnect.au3

#Region Includes
#include <winapi.au3>
#include <WinAPIEx.au3>
#include <GuiToolbar.au3>
#include <GuiImageList.au3>
#include <GUIConstants.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUITab.au3>
#include <GuiTreeView.au3>
#include <Constants.au3>
#include <TabConstants.au3>
#include <WinAPIEx.au3>
#include <DatabaseConnect.au3>
#include <TreeViewConstants.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <Misc.au3>
;todo - clean out includes no longer used / remove large includes i can just replace with Const values... 

#EndRegion

GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

#Region URL ref
;This is a site I used to trial and error finding the Id's for the Icons I wanted.
;http://diymediahome.org/windows-icons-reference-list-with-details-locations-images/
#EndRegion

#Region Vars
;Only Tested on Win7 64 machine
Local $fIconsLoc1 = "imageres.dll"
Local $fIconsLoc2 = "Resources\Icons\Undo.ico"

Global $aStrings[12]
Local $iNew,$iBrowse,$iEdit,$iDelete,$iSave,$iPrint
Global Enum $e_new =1000, $e_edit, $e_delete, $e_save, $e_print, $e_undo
Global $iItem, $cTreeView1, $cTreeView2,$hDll, $pDll, $hProc
Global $hTab1, $hTab2, $hTab3
Global $hItemHover
Global $aHwndFrom, $aHwndTo
Global $hTvItemHover,$hLvItemHover
Global $Debugmode = True
Global $aLV_Offset,$aForm_Offset,$aWin1,$aWin2


; Icon Index from DLL
$iNew = 2
;$iBrowse = 202
$iEdit = 111
$iDelete = 84
$iSave = 23
$iPrint = 46

$iGuiWidth = 1024
$iGUIHeight = 768
$BkColor = 0xf0f0f0

#EndRegion Vars

;Create Form, Toobar and ImageList
$hGui = GUICreate("EDM and CNC Schedule",$iGuiWidth,$iGUIHeight,-1,-1)
GUISetState()

Global $hToolbar1 = _GUICtrlToolbar_Create($hGui)
$imgs = _GUIImageList_Create(32,32,5) ; change first 2 params to Size the icons accordingly.

#Region Toolbar
;Populate Image List
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iNew,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iEdit,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iDelete,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iSave,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc1,$iPrint,True)
_GUIImageList_AddIcon($imgs, $fIconsLoc2,0,True)

;Add Text to Buttons in Toolbar
$aStrings[0] = _GUICtrlToolbar_AddString($hToolbar1, "&New")
$aStrings[1] = _GUICtrlToolbar_AddString($hToolbar1, "&Edit")
$aStrings[2] = _GUICtrlToolbar_AddString($hToolbar1, "&Delete")
$aStrings[3] = _GUICtrlToolbar_AddString($hToolbar1, "&Save")
$aStrings[4] = _GUICtrlToolbar_AddString($hToolbar1, "&Print")
$aStrings[5] = _GUICtrlToolbar_AddString($hToolbar1, "&Undo")

;Set Imagelist of Toolbar to my ImageList
$t = _GUICtrlToolbar_SetImageList($hToolbar1, $imgs)

;Add buttons to toolbar
$cBtn_New = _GUICtrlToolbar_AddButton($hToolbar1, $e_new, 0,$aStrings[0])
$cBtn_Edit =_GUICtrlToolbar_AddButton($hToolbar1, $e_edit, 1,$aStrings[1])
$cBtn_Delete =_GUICtrlToolbar_AddButton($hToolbar1, $e_delete, 2,$aStrings[2])
$cBtn_Save =_GUICtrlToolbar_AddButton($hToolbar1, $e_save, 3,$aStrings[3])
$cBtn_Print =_GUICtrlToolbar_AddButton($hToolbar1, $e_print, 4,$aStrings[4])
$cBtn_Undo =_GUICtrlToolbar_AddButton($hToolbar1, $e_undo, 5,$aStrings[5])
GUISetState()

#EndRegion Toolbar


#Region Create Tabs
$hGui1 = GUICreate("",$iGuiWidth-8,$iGUIHeight-65,5,60, $WS_POPUP, $WS_EX_MDICHILD,$hgui)
;~ GUISetBkColor(0x00FF00,$hGui1)
; Create top level Tab Items
$hTab1 = GUICtrlCreateTab(0,1,$iGuiWidth-8,$iGUIHeight-65)
$hTab1_0 = GUICtrlCreateTabItem("EDM Schedule")

;cTreeView 1
$cTreeView1  = GUICtrlCreateTreeView(0, 25, 175, 678, BitOR($TVS_HASBUTTONS,  $TVS_HASLINES, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
;Set TreeView Data
$generalitem = GUICtrlCreateTreeViewItem("16012", $cTreeView1)
GUICtrlSetColor(-1, 0x0000C0)
$displayitem = GUICtrlCreateTreeViewItem("16187", $cTreeView1)
GUICtrlSetColor(-1, 0x0000C0)
GUICtrlCreateTreeViewItem("Stripper", $generalitem)
GUICtrlCreateTreeViewItem("Die Plate", $generalitem)
GUICtrlCreateTreeViewItem("Punch String", $generalitem)
GUICtrlCreateTreeViewItem("Die Insert String", $displayitem)
GUICtrlCreateTreeViewItem("Punch Plate", $displayitem)
GUICtrlSetState($generalitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
GUICtrlSetState($displayitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "Display"-item and paint in bold


;~ GUISetState()
$hTab1_1 = GUICtrlCreateTabItem("CNC Schedule ")


;cTreeView 2
$cTreeView2  = GUICtrlCreateTreeView(0, 25, 175, 678, BitOR($TVS_HASBUTTONS,  $TVS_HASLINES, $TVS_LINESATROOT, $TVS_SHOWSELALWAYS),$WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)
$generalitem = GUICtrlCreateTreeViewItem("15874", $cTreeView2)
GUICtrlSetColor(-1, 0x0000C0)
$displayitem = GUICtrlCreateTreeViewItem("16183", $cTreeView2)
GUICtrlSetColor(-1, 0x0000C0)
GUICtrlCreateTreeViewItem("Punch Plate", $generalitem)
GUICtrlCreateTreeViewItem("Die Plate", $generalitem)
GUICtrlCreateTreeViewItem("Stripper", $generalitem)
GUICtrlCreateTreeViewItem("Die Shoe", $displayitem)
GUICtrlCreateTreeViewItem("Punch Holder", $displayitem)
GUICtrlSetState($generalitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "General"-item and paint in bold
GUICtrlSetState($displayitem, BitOR($GUI_EXPAND, $GUI_DEFBUTTON)) ; Expand the "Display"-item and paint in bold.

GUICtrlCreateTabItem("")

GUISetState()

;Create Inner GUI to hold the listviews for first tab
$hGuiInner1 = GUICreate("",  834,679, 182,28, $WS_POPUP,$WS_EX_MDICHILD, $hgui1)
$hLabelMask1 = GUICtrlCreateLabel("",89 ,0, 760, 21, BitOR($SS_NOTIFY, $SS_CENTER))
GUICtrlsetBkColor ($hLabelMask1,0xffffff )
$hTab2 = GUICtrlCreateTab(0,0,834,679)
$hTab2_0 = GUICtrlCreateTabItem("Fryer ")
$ListView5 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$ListView5_0 = GUICtrlCreateListViewItem("Item1", $ListView5)
$ListView5_1 = GUICtrlCreateListViewItem("Item2", $ListView5)
$ListView5_2 = GUICtrlCreateListViewItem("Item3", $ListView5)
$ListView5_3 = GUICtrlCreateListViewItem("Item4", $ListView5)
$hTab2_1 = GUICtrlCreateTabItem("Micron")
$ListView6 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$ListView6_0 = GUICtrlCreateListViewItem("Item1", $ListView6)
$ListView6_1 = GUICtrlCreateListViewItem("Item2", $ListView6)
$ListView6_2 = GUICtrlCreateListViewItem("Item3", $ListView6)
$ListView6_3 = GUICtrlCreateListViewItem("Item4", $ListView6)
GUICtrlCreateTabItem("")
GUISetState()

;Create Inner GUI to hold the listviews for second tab
$hGuiInner2 = GUICreate("",  834,679, 182,28, $WS_POPUP,$WS_EX_MDICHILD, $hgui1)
$hLabelMask2 = GUICtrlCreateLabel("",264 , 0, 750, 21, BitOR($SS_NOTIFY, $SS_CENTER))
GUICtrlsetBkColor ($hLabelMask2,0xffffff )
$hTab3 = GUICtrlCreateTab(0,0,834,679)
$hTab3_0 = GUICtrlCreateTabItem("Agie V3")
$ListView7 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$ListView7_0 = GUICtrlCreateListViewItem("Item1", $ListView7)
$ListView7_1 = GUICtrlCreateListViewItem("Item2", $ListView7)
$ListView7_2 = GUICtrlCreateListViewItem("Item3", $ListView7)
$ListView7_3 = GUICtrlCreateListViewItem("Item4", $ListView7)
$hTab3_1 = GUICtrlCreateTabItem("Agie V2")
$ListView8 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$hTab3_2 = GUICtrlCreateTabItem("Agie V22")
$ListView9 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$hTab3_3 = GUICtrlCreateTabItem("Agie VP2")
$ListView10 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
$hTab3_4 = GUICtrlCreateTabItem("Progress")
$ListView11 = GUICtrlCreateListView("col1|col2|col3",  0, 20, 833, 658)
GUICtrlCreateTabItem("")
GUISetState()

$aLV_Offset= _ScreenOffset(ControlGetHandle($hGuiInner1,"",$ListView5)) ; just to get the location of all listview (left top width hieght)

#EndRegion End tabs

#Region GUI Message Loop

While 1
    $idMsg = GUIGetMsg()
    Switch $idMsg
        Case $GUI_EVENT_MOUSEMOVE
            if _IsPressed("01") Then
                $aHwndTo = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1))
                _Drag($aHwndTo[0])
                if MouseGetPos(0) > $aLV_Offset[0] and MouseGetPos(1) > $aLV_Offset[1] and MouseGetPos(0) < $aLV_Offset[2] and MouseGetPos(1) < $aLV_Offset[3] then
                    $aHwndFrom = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1))
                endif
            endif
        Case $GUI_EVENT_DROPPED
            $aHwndTo = DllCall("user32.dll", "hwnd", "WindowFromPoint", "uint", MouseGetPos(0), "uint", MouseGetPos(1))
            _Drop($aHwndTo[0],$aHwndFrom[0])
        Case $GUI_EVENT_CLOSE
            Exit
        Case $htab1
            Switch GUICtrlRead($htab1)
                Case 0
                    ; Adjust child GUIs accordingly
                    GUISetState(@SW_HIDE, $hGuiInner1)
                    GUISetState(@SW_SHOW, $hGuiInner2)
                Case 1
                    GUISetState(@SW_HIDE, $hGuiInner2)
                    GUISetState(@SW_SHOW, $hGuiInner1)
            EndSwitch
    EndSwitch
WEnd
#EndRegion GUI Message Loop

#Region Functions

; WM_NOTIFY event handler
Func _WM_NOTIFY($hWndGUI, $MsgID, $wParam, $lParam)
    #forceref $hWndGUI, $MsgID, $wParam
    Local $tNMHDR, $event, $hwndFrom, $icode, $i_idNew, $dwFlags, $lResult, $idFrom, $i_idOld, $sButtonName, $hTreeView1, $hTreeView2
    Local $tNMTOOLBAR, $tNMTBHOTITEM
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hwndFrom = DllStructGetData($tNMHDR, "hWndFrom")
    $idFrom = DllStructGetData($tNMHDR, "IDFrom")
    $icode = DllStructGetData($tNMHDR, "Code")
    $hTreeview1 = $cTreeView1
    $hTreeview2 = $cTreeView2
    If Not IsHWnd($cTreeView1) Then $hTreeview1 = GUICtrlGetHandle($cTreeView1)
    If Not IsHWnd($cTreeView2) Then $hTreeview2 = GUICtrlGetHandle($cTreeView2)
    Switch $hwndFrom
        Case $hToolbar1
            Switch $icode
                Case $NM_LDOWN
                    ;case for which button was clicked
                    Switch $iItem
                        Case $e_new
                            _button_Click($e_new)
                        Case $e_edit
                            _button_Click($e_edit)
                        Case $e_save
                            _button_Click($e_save)
                        Case $e_delete
                            _button_Click($e_delete)
                        Case $e_print
                            _button_Click($e_print)
                        Case $e_undo
                            _button_Click($e_undo)
                    EndSwitch
                Case $TBN_HOTITEMCHANGE
                    $tNMTBHOTITEM = DllStructCreate($tagNMTBHOTITEM, $lParam)
                    $i_idOld = DllStructGetData($tNMTBHOTITEM, "idOld")
                    $i_idNew = DllStructGetData($tNMTBHOTITEM, "idNew")
                    $iItem = $i_idNew
                    $dwFlags = DllStructGetData($tNMTBHOTITEM, "dwFlags")
            EndSwitch
        Case $hTreeView1, $hTreeView2
;~          Switch $icode
;~              Case $NM_CLICK ; The user has clicked the left mouse button within the control
;~                  _DebugPrint("$NM_CLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_DBLCLK ; The user has double-clicked the left mouse button within the control
;~                  _DebugPrint("$NM_DBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_RCLICK ; The user has clicked the right mouse button within the control
;~                  _DebugPrint("$NM_RCLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_RDBLCLK ; The user has double-clicked the right mouse button within the control
;~                  _DebugPrint("$NM_RDBLCLK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~              Case $NM_KILLFOCUS ; control has lost the input focus
;~                  _DebugPrint("$NM_KILLFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; No return value
;~              Case $NM_RETURN ; control has the input focus and that the user has pressed the key
;~                  _DebugPrint("$NM_RETURN" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; Return 1 ; nonzero to not allow the default processing
;~                  Return 0 ; zero to allow the default processing
;~                  ; Case $NM_SETCURSOR ; control is setting the cursor in response to a WM_SETCURSOR message
;~                  ; Local $tInfo = DllStructCreate($tagNMMOUSE, $lParam)
;~                  ; $hWndFrom = HWnd(DllStructGetData($tInfo, "hWndFrom"))
;~                  ; $iIDFrom = DllStructGetData($tInfo, "IDFrom")
;~                  ; $iCode = DllStructGetData($tInfo, "Code")
;~                  ; _DebugPrint("$NM_SETCURSOR" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                  ; "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
;~                  ; "-->Code:" & @TAB & $iCode & @CRLF & _
;~                  ; "-->ItemSpec:" & @TAB & DllStructGetData($tInfo, "ItemSpec") & @CRLF & _
;~                  ; "-->ItemData:" & @TAB & DllStructGetData($tInfo, "ItemData") & @CRLF & _
;~                  ; "-->X:" & @TAB & DllStructGetData($tInfo, "X") & @CRLF & _
;~                  ; "-->Y:" & @TAB & DllStructGetData($tInfo, "Y") & @CRLF & _
;~                  ; "-->HitInfo:" & @TAB & DllStructGetData($tInfo, "HitInfo"))
;~                  ; Return 0 ; to enable the control to set the cursor
;~                  ; Return 1 ; nonzero to prevent the control from setting the cursor
;~              Case $NM_SETFOCUS ; control has received the input focus
;~                  _DebugPrint("$NM_SETFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
;~                          "-->IDFrom:" & @TAB & $iDFrom & @CRLF & _
;~                          "-->Code:" & @TAB & $iCode, $Debugmode)
;~                  ; No return value
;~              Case $TVN_BEGINDRAGA, $TVN_BEGINDRAGW
;~                  _DebugPrint("$TVN_BEGINDRAG", $Debugmode)
;~              Case $TVN_BEGINLABELEDITA, $TVN_BEGINLABELEDITW
;~                  _DebugPrint("$TVN_BEGINLABELEDIT", $Debugmode)
;~              Case $TVN_BEGINRDRAGA, $TVN_BEGINRDRAGW
;~                  _DebugPrint("$TVN_BEGINRDRAG", $Debugmode)
;~              Case $TVN_DELETEITEMA, $TVN_DELETEITEMW
;~                  _DebugPrint("$TVN_DELETEITEM", $Debugmode)
;~              Case $TVN_ENDLABELEDITA, $TVN_ENDLABELEDITW
;~                  _DebugPrint("$TVN_ENDLABELEDIT", $Debugmode)
;~              Case $TVN_GETDISPINFOA, $TVN_GETDISPINFOW
;~                  _DebugPrint("$TVN_GETDISPINFO", $Debugmode)
;~              Case $TVN_GETINFOTIPA, $TVN_GETINFOTIPW
;~                  _DebugPrint("$TVN_GETINFOTIP", $Debugmode)
;~              Case $TVN_ITEMEXPANDEDA, $TVN_ITEMEXPANDEDW
;~                  _DebugPrint("$TVN_ITEMEXPANDED", $Debugmode)
;~              Case $TVN_ITEMEXPANDINGA, $TVN_ITEMEXPANDINGW
;~                  _DebugPrint("$TVN_ITEMEXPANDING", $Debugmode)
;~              Case $TVN_KEYDOWN
;~                  _DebugPrint("$TVN_KEYDOWN", $Debugmode)
;~              Case $TVN_SELCHANGEDA, $TVN_SELCHANGEDW
;~                  _DebugPrint("$TVN_SELCHANGED", $Debugmode)
;~              Case $TVN_SELCHANGINGA, $TVN_SELCHANGINGW
;~                  _DebugPrint("$TVN_SELCHANGING", $Debugmode)
;~              Case $TVN_SETDISPINFOA, $TVN_SETDISPINFOW
;~                  _DebugPrint("$TVN_SETDISPINFO", $Debugmode)
;~              Case $TVN_SINGLEEXPAND
;~                  _DebugPrint("$TVN_SINGLEEXPAND", $Debugmode)
;~          EndSwitch

    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc

func _button_Click($btn_ID)
    Switch $btn_ID
        Case $e_new
            _DebugPrint("Clicked New button" & @LF, $Debugmode)
        case $e_edit
            _DebugPrint("Clicked Edit button" & @LF, $Debugmode)
        Case $e_save
            _DebugPrint("Clicked Save button" & @LF, $Debugmode)
        Case $e_delete
            _DebugPrint("Clicked Delete button" & @LF, $Debugmode)
        Case $e_print
            _DebugPrint("Clicked Print button" & @LF, $Debugmode)
        Case $e_undo
            _DebugPrint("Clicked Undo button" & @LF, $Debugmode)
    EndSwitch
endfunc  ;==>_button_Click

Func _TreeItemFromPoint($hWnd)
    Local $tMPos = _WinAPI_GetMousePos(True, $hWnd)
    Return _GUICtrlTreeView_HitTestItem($hWnd, DllStructGetData($tMPos, 1), DllStructGetData($tMPos, 2))
EndFunc ;==>_TreeItemFromPoint

Func _Drag($hWnd)
    $hTvItemHover = _TreeItemFromPoint($hWnd)
    If $hTvItemHover = 0 Then

    Else ;Entered the Treeview
        $aRect = _GUICtrlTreeView_DisplayRect($hWnd, $hTvItemHover)
        $iTreeY = _WinAPI_GetMousePosY(True, $hWnd)
        Switch $iTreeY
            Case $aRect[1] To $aRect[1]+Int(($aRect[3]-$aRect[1])/4)
                _SendMessage($hWnd, $TVM_SELECTITEM, $TVGN_DROPHILITE, 0) ;remove DropTarget
                $fWhere = -1
            Case 1+$aRect[1]+Int(($aRect[3]-$aRect[1])/3) To $aRect[1]+Int(($aRect[3]-$aRect[1])*2/3)
                _SendMessage($hWnd, $TVM_SELECTITEM, $TVGN_DROPHILITE, $hTvItemHover) ;add DropTarget
                $fWhere = 0
            Case 1+$aRect[1]+Int(($aRect[3]-$aRect[1])*2/3) To $aRect[3]
                _SendMessage($hWnd, $TVM_SELECTITEM, $TVGN_DROPHILITE, 0) ;remove DropTarget
                $fWhere = 1
        EndSwitch
    EndIf
EndFunc ;==>_Drag

Func _Drop($hWndTo, $hWndFrom)
    If $hTvItemHover <> 0 Then
        if _WinAPI_GetClassName($hWndFrom) = "SysListView32" then
            ; Get selected item in the listview
            $tmpItemArr = _GUICtrlListView_GetSelectedIndices($hWndFrom, TRUE)
            $tmpItem = _GUICtrlListView_GetItemText($hWndFrom, $tmpItemArr[1])

            ; Get the selected item in the treeview
            $hSelected_Item = _GUICtrlTreeView_GetSelection($hWndTo)

            $myMSG = "Dragged: " & $tmpItem & @CRLF _
            & "Dropped On: " & _GUICtrlTreeView_GetText($hWndTo, $hTvItemHover)
            _DebugPrint(@CRLF & $myMsg,$Debugmode)
            ; Reset drop target
            _SendMessage(GUICtrlGetHandle($hWndTo), $TVM_SELECTITEM, $TVGN_DROPHILITE, 0) ;remove DropTarget
        EndIf
    Else
        MsgBox(0, "", "No drop target")
    EndIf
EndFunc ;==>_Drop

Func _ScreenOffset($hWnd)
    $aWin1 = WinGetPos($hGuiInner1)
    $aWin2 = WinGetPos($hWnd)
    Local $tPoint = DllStructCreate("int X;int Y")
    local $aCoords[4]
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)
    _WinAPI_ClientToScreen($hWnd, $tPoint)
    DllStructGetData($tPoint, "X")
    DllStructGetData($tPoint, "Y")

    $aCoords[0] = $awin2[0];Left
    $aCoords[1] = $awin2[1];Top
    $aCoords[2] = $awin2[2]+$aCoords[0];Width + left
    $aCoords[3] = $awin2[3]+$aCoords[1];Height + Top

    return $aCoords
EndFunc   ;==>_ScreenOffset

Func _DebugPrint($sText, $isEnabled, $sLine = @ScriptLineNumber)
    if $isenabled then
        ConsoleWrite(">--------------------------------" & @CRLF & _
        "-->Line(" & StringFormat("%04d", $sLine) & "):" & @TAB & $sText & @CRLF & _
        ">--------------------------------" & @CRLF)
    EndIf
EndFunc ;==>_DebugPrint


#EndRegion functions
Edited by JakeJohnson74

Share this post


Link to post
Share on other sites
JakeJohnson74

This is really weird, normally I get replies to my posts - Wonder why this post is dead?

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • Sven-Seyfert
      By Sven-Seyfert
       
      Hi Community,

      I have a problem with the usage of _GUICtrlTreeView_AddChild and setting different item text colors (and different background colors), separately for the TreeView levels.

      I use the UDF GUITreeViewEx.au3 of 'Melba23' and I renamed the functions to increase my understanding about the content. I already talked to him about his UDF to respect his rights and intellectual property. I read many forum threads, I tried many ways to get it, but it's seems to be impossible in the way that I use the UDF.

      Question:
      How can I set different item text colors, separately for the TreeView levels?
      How can I set different item background colors, separately for the TreeView levels?

      I found out that _GUICtrlTreeView_AddChild don't let my set this properties directly. But after loading the TreeView content I can't change the items (children) too. Only the font weight to bold I could set with _GUICtrlTreeView_SetBold but I want to do this in a generic way directly at the creation (loading) of the TreeView.

      Of course I tried the different functions to set text color or bkgColor, but it didn't work - maybe I do it wrong.
      I really hope you can help me, give me a hint and understand what I want to do.
      [Solved] final solution made by @LarsJ (see below)

      Thanks for your help - I'm grateful!
      Sven

      CODE
      BEFORE
      AFTER
      ExecutionPlan.zip
    • Skysnake
      By Skysnake
      I am tracking this topic by @LarsJ.  It is very advanced and overkill for what I am currently trying to do.
       
      Problem is this.
      Listview contains columns, one of which is right aligned and gets populated by float values, such as 123.99.  Some do not have decimals ie 124.00 and on sort gets truncated to 124.  Its obviously still the same value, but the display has reset.
      ; line below is for list VIEW ;..................................0.........1......2............ $cListView = GUICtrlCreateListView("CUSTOMER|AMOUNT|DESCRIPTION", 8, 152, 764, 279) GUICtrlSetBkColor($cListView, $GUI_BKCOLOR_LV_ALTERNATE) ; alternate between the listview background color and the listview item background color GUICtrlSetBkColor($cListView, $LVStdClr) ; Set the background color for the listview _GUICtrlListView_SetColumnWidth($cListView, 0, 120) ; -- the client name _GUICtrlListView_SetColumnWidth($cListView, 1, 90) ;-- the amount _GUICtrlListView_JustifyColumn($cListView, 1, 1) ; 1 - Text is right aligned _GUICtrlListView_SetColumnWidth($cListView, 2, 200) ; the description What I am looking for is something native and simple like a 
          _GUICtrlListView_SetColumnFormat($cListView, 1, "%.2f") ;  1 - column is stringformatted to "%.2f"
      So that after each sort it will appear as it was in the original rendering.
      Is there something like this? I have not been able to find a simple solution.

      Thanks.
      Skysnake
    • Ambient
      By Ambient
      I have tried several way sto get this to work to no avail. Any help would be appreciated. #include <ListViewConstants.au3> #include <GuiListView.au3> #include "GuiListViewEx.au3" $idItem = GUICtrlCreateListViewItem($r & " | " & $c & $adoRs.Fields("TransactionAmount").value & " | " & $Timestamp & " | " & _StringProper($adoRs.Fields("Tillid").value) & @CRLF & @CRLF & "Card Number : " & $cardnum & " " , $idListView) ConsoleWrite( "IDITEM" & $idItem) If STRINGLEFT($adoRs.Fields("TransactionAmount").value,1)= "-" Then Consolewrite(" String is Negative" & @CRLF) ;Drops in Here as expected ;GUICtrlSetColor(-1, $COLOR_RED) ; Colour line if item is negative this didn' work $TxC= _GUICtrlListView_SetTextColor($hListView, $CLR_RED) ; I also tried $TxC= _GUICtrlListView_SetTextColor(-1, 0xFF0000) CONSOLEWRITE("TEXTCOLOUR RETURNED " & $TxC & @crlf) ; This is returning True ELSE Consolewrite(" String is NOT Negative" & @CRLF) EndIf  
    • Bilgus
      By Bilgus
      Example of Subclassing listviews using setwindowSubclass in order to intercept WM_KEYUP events
      Also pops context menu on  Shift + F10
      #include <Misc.au3> #include <ListViewConstants.au3> #include <GUIConstants.au3> #include <GuiMenu.au3> #include <WinAPIShellEx.au3> Global $g_hCB, $g_pCB, $g_ahProc[2][2] ;Stores the Data for subclassing listview Global $g_LVKEYUP = 0xFE00, $g_LVKEYDN = 0xFD00 ;Our Own Custom messages (Key Up/Dn) Global $g_iDummyData Global $g_hGui = GUICreate("test") Global $g_hList1 = GUICtrlCreateListView("#|x|y", 5, 24, 161, 70, $LVS_SHOWSELALWAYS Or $LVS_SINGLESEL) GUICtrlCreateListViewItem("text", $g_hList1) Global $g_hList1_LVN = GUICtrlCreateDummy() ;Recieves Messages from the callback Global $g_hContext1 = GUICtrlCreateContextMenu($g_hList1) GUICtrlCreateMenuItem("1", $g_hContext1) GUICtrlCreateMenuItem("2", $g_hContext1) Global $g_hList2 = GUICtrlCreateListView("#|x|y", 5, 100, 161, 70, $LVS_SHOWSELALWAYS Or $LVS_SINGLESEL) GUICtrlCreateListViewItem("text", $g_hList2) Global $g_hList2_LVN = GUICtrlCreateDummy() ;Recieves Messages from the callback Global $g_hContext2 = GUICtrlCreateContextMenu($g_hList2) GUICtrlCreateMenuItem("3", $g_hContext2) GUICtrlCreateMenuItem("4", $g_hContext2) GUISetState(@SW_SHOW) SubClassListView() ;Creates our subclass Func SubClassListView() OnAutoItExitRegister("Cleanup") ;to remove our subclass $g_hCB = DllCallbackRegister('_SubclassProc', 'lresult', 'hwnd;uint;wparam;lparam;uint_ptr;dword_ptr') $g_pCB = DllCallbackGetPtr($g_hCB) $g_ahProc[0][0] = $g_hList1 ;Add the Ids of the controls we'd like to subclass $g_ahProc[1][0] = $g_hList2 ;Set up the subclass _WinAPI_SetWindowSubclass ( $hWnd, $pSubclassProc, $idSubClass [, $pData = 0] ) $g_ahProc[0][1] = _WinAPI_SetWindowSubclass(GUICtrlGetHandle($g_ahProc[0][0]), $g_pCB, $g_ahProc[0][0], $g_hList1_LVN) $g_ahProc[1][1] = _WinAPI_SetWindowSubclass(GUICtrlGetHandle($g_ahProc[1][0]), $g_pCB, $g_ahProc[1][0], $g_hList2_LVN) EndFunc ;==>SubClassListView Func _SubclassProc($hWnd, $iMsg, $wParam, $lParam, $iID, $pData) #forceref $iID Local $iRtnMsg = 0 ;Events we'd like to intercept If $iMsg = $WM_KEYUP Or $iMsg = $WM_SYSKEYUP Then $iRtnMsg = $g_LVKEYUP ElseIf $iMsg = $WM_KEYDOWN Or $iMsg = $WM_SYSKEYDOWN Then $iRtnMsg = $g_LVKEYDN EndIf ;We Recieve the Id of the dummy through $pData and pass our RtnMsg to the dummy control If $iRtnMsg Then GUICtrlSendToDummy($pData, BitOR($iRtnMsg, $wParam)) ;Pass messages on to the default handler Return _WinAPI_DefSubclassProc($hWnd, $iMsg, $wParam, $lParam) EndFunc ;==>_SubclassProc Func Cleanup() For $i = 0 To UBound($g_ahProc) - 1 ;Remove Our Subclass' by setting it back to the original proc _WinAPI_RemoveWindowSubclass(GUICtrlGetHandle($g_ahProc[$i][0]), DllCallbackGetPtr($g_ahProc[$i][1]), $g_ahProc[$i][0]) Next DllCallbackFree($g_hCB) EndFunc ;==>Cleanup While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $g_hList1_LVN ;This is just a dummy it only recieves events ConsoleWrite("LV1 EVENT 0x" & Hex($g_iDummyData, 4) & @CRLF) $g_iDummyData = GUICtrlRead($g_hList1_LVN) ;Retrieve the code that was sent Switch BitAND($g_iDummyData, 0xFF00) ;Get the keyup/dn status Case $g_LVKEYDN If BitAND($g_iDummyData, 0x00FF) = 0x79 And (_IsPressed("A0") Or _IsPressed("A1")) Then ;Right/ Left Shift & F10 ShowMenu($g_hGui, $g_hList1, $g_hContext1) Else ConsoleWrite("Lv1 KeyDn Vk: 0x" & Hex(BitAND($g_iDummyData, 0x00FF), 2) & @CRLF) ;Get the Virtual keycode EndIf Case $g_LVKEYUP ConsoleWrite("Lv1 KeyUp Vk: 0x" & Hex(BitAND($g_iDummyData, 0x00FF), 2) & @CRLF) ;Get the Virtual keycode EndSwitch Case $g_hList2_LVN $g_iDummyData = GUICtrlRead($g_hList2_LVN) ;Retrieve the code that was sent ConsoleWrite("LV2 EVENT 0x" & Hex($g_iDummyData, 4) & @CRLF) Switch BitAND($g_iDummyData, 0xFF00) ;Get the keyup/dn status Case $g_LVKEYDN ConsoleWrite("Lv2 KeyDn Vk: 0x" & Hex(BitAND($g_iDummyData, 0x00FF), 2) & @CRLF) ;Get the Virtual keycode Case $g_LVKEYUP ConsoleWrite("Lv2 KeyUp Vk: 0x" & Hex(BitAND($g_iDummyData, 0x00FF), 2) & @CRLF) ;Get the Virtual keycode EndSwitch EndSwitch WEnd Func ShowMenu($hWnd, $idCtrl, $idContext) Local $aPos, $iX, $iY Local $hMenu = GUICtrlGetHandle($idContext) $aPos = ControlGetPos($hWnd, "", $idCtrl) $iX = $aPos[0] $iY = $aPos[1] + $aPos[3] ClientToScreen($hWnd, $iX, $iY) ; Show at the given coordinates (x, y) the popup menu (hMenu) which belongs to a given GUI window (hWnd) _GUICtrlMenu_TrackPopupMenu($hMenu, $hWnd, $iX, $iY) EndFunc ;==>ShowMenu ; Convert the client (GUI) coordinates to screen (desktop) coordinates Func ClientToScreen($hWnd, ByRef $iX, ByRef $iY) Local $tPoint = DllStructCreate("int;int") DllStructSetData($tPoint, 1, $iX) DllStructSetData($tPoint, 2, $iY) DllCall("user32.dll", "int", "ClientToScreen", "hwnd", $hWnd, "struct*", $tPoint) $iX = DllStructGetData($tPoint, 1) $iY = DllStructGetData($tPoint, 2) ; release Struct not really needed as it is a local $tPoint = 0 EndFunc ;==>ClientToScreen  
      Old Code Using setWindowLong
       
    • Bilgus
      By Bilgus
      Literally just a list of listview styles / extended styles and WS / WSEX styles prints them in the console by their name
      ;Debug ;Debug_GetLvMStyles($g_hListView) ;Debug_GetHDStyles($g_hListView) ;Debug_GetWSStyles($g_hListView) ;Debug_GetWSStyles($g_hWnd) ;;#include <ListViewConstants.au3> Func Debug_GetLvMStyles($hListView) Local $LVStyle = _WinAPI_GetWindowLong($hListView, -16) Local $LVExStyle = _GUICtrlListView_GetExtendedListViewStyle($hListView) Local $sLVSTYLES Local $sLVExSTYLES If @error Then ConsoleWrite(" Error Debug_GetLvMStyles Couldn't retrieve Styles") Return EndIf If BitAND($LVStyle, $LVS_ALIGNLEFT) Then $sLVSTYLES &= "$LVS_ALIGNLEFT, " If BitAND($LVStyle, $LVS_ALIGNMASK) Then $sLVSTYLES &= "$LVS_ALIGNMASK, " If BitAND($LVStyle, $LVS_ALIGNTOP) Then $sLVSTYLES &= "$LVS_ALIGNTOP, " If BitAND($LVStyle, $LVS_AUTOARRANGE) Then $sLVSTYLES &= "$LVS_AUTOARRANGE, " If BitAND($LVStyle, $LVS_DEFAULT) Then $sLVSTYLES &= "LVS_DEFAULT," If BitAND($LVStyle, $LVS_EDITLABELS) Then $sLVSTYLES &= "LVS_EDITLABELS, " If BitAND($LVStyle, $LVS_ICON) Then $sLVSTYLES &= "LVS_ICON, " If BitAND($LVStyle, $LVS_LIST) Then $sLVSTYLES &= "LVS_LIST, " If BitAND($LVStyle, $LVS_NOCOLUMNHEADER) Then $sLVSTYLES &= "LVS_NOCOLUMNHEADER, " If BitAND($LVStyle, $LVS_NOLABELWRAP) Then $sLVSTYLES &= "LVS_NOLABELWRAP, " If BitAND($LVStyle, $LVS_NOSCROLL) Then $sLVSTYLES &= "LVS_NOSCROLL, " If BitAND($LVStyle, $LVS_NOSORTHEADER) Then $sLVSTYLES &= "LVS_NOSORTHEADER, " If BitAND($LVStyle, $LVS_OWNERDATA) Then $sLVSTYLES &= "LVS_OWNERDATA, " If BitAND($LVStyle, $LVS_OWNERDRAWFIXED) Then $sLVSTYLES &= "LVS_OWNERDRAWFIXED, " If BitAND($LVStyle, $LVS_REPORT) Then $sLVSTYLES &= "LVS_REPORT, " If BitAND($LVStyle, $LVS_SHAREIMAGELISTS) Then $sLVSTYLES &= "LVS_SHAREIMAGELISTS, " If BitAND($LVStyle, $LVS_SHOWSELALWAYS) Then $sLVSTYLES &= "LVS_SHOWSELALWAYS, " If BitAND($LVStyle, $LVS_SINGLESEL) Then $sLVSTYLES &= "LVS_SINGLESEL, " If BitAND($LVStyle, $LVS_SMALLICON) Then $sLVSTYLES &= "LVS_SMALLICON, " If BitAND($LVStyle, $LVS_SORTASCENDING) Then $sLVSTYLES &= "LVS_SORTASCENDING, " If BitAND($LVStyle, $LVS_SORTDESCENDING) Then $sLVSTYLES &= "LVS_SORTDESCENDING, " If BitAND($LVStyle, $LVS_TYPEMASK) Then $sLVSTYLES &= "LVS_TYPEMASK, " If BitAND($LVStyle, $LVS_TYPESTYLEMASK) Then $sLVSTYLES &= "LVS_TYPESTYLEMASK, " If BitAND($LVExStyle, $LVS_EX_AUTOAUTOARRANGE) Then $sLVExSTYLES &= "$LVS_EX_AUTOARRANGE, " If BitAND($LVExStyle, $LVS_EX_AUTOCHECKSELECT) Then $sLVExSTYLES &= "$LVS_EX_AUTOCHECKSELECT, " If BitAND($LVExStyle, $LVS_EX_AUTOSIZECOLUMNS) Then $sLVExSTYLES &= "$LVS_EX_AUTOSIZECOLUMNS, " If BitAND($LVExStyle, $LVS_EX_BORDERSELECT) Then $sLVExSTYLES &= "$LVS_EX_BORDERSELECT, " If BitAND($LVExStyle, $LVS_EX_CHECKBOXES) Then $sLVExSTYLES &= "$LVS_EX_CHECKBOXES, " If BitAND($LVExStyle, $LVS_EX_COLUMNOVERFLOW) Then $sLVExSTYLES &= "$LVS_EX_COLUMNOVERFLOW, " If BitAND($LVExStyle, $LVS_EX_COLUMNSNAPPOINTS) Then $sLVExSTYLES &= "$LVS_EX_COLUMNSNAPPOINTS, " If BitAND($LVExStyle, $LVS_EX_DOUBLEBUFFER) Then $sLVExSTYLES &= "$LVS_EX_DOUBLEBUFFER, " If BitAND($LVExStyle, $LVS_EX_FLATSB) Then $sLVExSTYLES &= "$LVS_EX_FLATSB, " If BitAND($LVExStyle, $LVS_EX_FULLROWSELECT) Then $sLVExSTYLES &= "$LVS_EX_FULLROWSELECT, " If BitAND($LVExStyle, $LVS_EX_GRIDLINES) Then $sLVExSTYLES &= "$LVS_EX_GRIDLINES, " If BitAND($LVExStyle, $LVS_EX_HEADERDRAGDROP) Then $sLVExSTYLES &= "$LVS_EX_HEADERDRAGDROP, " If BitAND($LVExStyle, $LVS_EX_HEADERINALLVIEWS) Then $sLVExSTYLES &= "$LVS_EX_HEADERINALLVIEWS, " If BitAND($LVExStyle, $LVS_EX_HIDELABELS) Then $sLVExSTYLES &= "$LVS_EX_HIDELABELS, " If BitAND($LVExStyle, $LVS_EX_INFOTIP) Then $sLVExSTYLES &= "$LVS_EX_INFOTIP, " If BitAND($LVExStyle, $LVS_EX_JUSTIFYCOLUMNS) Then $sLVExSTYLES &= "$LVS_EX_JUSTIFYCOLUMNS, " If BitAND($LVExStyle, $LVS_EX_LABELTIP) Then $sLVExSTYLES &= "$LVS_EX_LABELTIP, " If BitAND($LVExStyle, $LVS_EX_MULTIWORKAREAS) Then $sLVExSTYLES &= "$LVS_EX_MULTIWORKAREAS, " If BitAND($LVExStyle, $LVS_EX_ONECLICKACTIVATE) Then $sLVExSTYLES &= "$LVS_EX_ONECLICKACTIVATE, " If BitAND($LVExStyle, $LVS_EX_REGIONAL) Then $sLVExSTYLES &= "$LVS_EX_REGIONAL, " If BitAND($LVExStyle, $LVS_EX_SIMPLESELECT) Then $sLVExSTYLES &= "$LVS_EX_SIMPLESELECT, " If BitAND($LVExStyle, $LVS_EX_SNAPTOGRID) Then $sLVExSTYLES &= "$LVS_EX_SNAPTOGRID, " If BitAND($LVExStyle, $LVS_EX_SUBITEMIMAGES) Then $sLVExSTYLES &= "$LVS_EX_SUBITEMIMAGES, " If BitAND($LVExStyle, $LVS_EX_TRACKSELECT) Then $sLVExSTYLES &= "$LVS_EX_TRACKSELECT, " If BitAND($LVExStyle, $LVS_EX_TRANSPARENTBKGND) Then $sLVExSTYLES &= "$LVS_EX_TRANSPARENTBACKGROUND, " If BitAND($LVExStyle, $LVS_EX_TRANSPARENTSHADOWTEXT) Then $sLVExSTYLES &= "$LVS_EX_TRANSPARENTTEXTSHADOW, " If BitAND($LVExStyle, $LVS_EX_TWOCLICKACTIVATE) Then $sLVExSTYLES &= "$LVS_EX_TWOCLICKACTIVATE, " If BitAND($LVExStyle, $LVS_EX_UNDERLINECOLD) Then $sLVExSTYLES &= "$LVS_EX_UNDERLINECOLD, " If BitAND($LVExStyle, $LVS_EX_UNDERLINEHOT) Then $sLVExSTYLES &= "$LVS_EX_UNDERLINEHOT, " ConsoleWrite("Lv Styles= " & $sLVSTYLES & @CRLF) ConsoleWrite("Lv Ex Styles= " & $sLVExSTYLES & @CRLF) EndFunc ;==>Debug_GetLvMStyles ;;#include <HeaderConstants.au3> Func Debug_GetHDStyles($hListView) Local $hHeader = _GUICtrlListView_GetHeader($hListView) Local $HDStyle = _WinAPI_GetWindowLong($hHeader, -16) Local $sHDSTYLES If @error Then ConsoleWrite(" Error Debug_GetHDStyles Couldn't retrieve Styles") Return EndIf If BitAND($HDStyle, $HDS_BUTTONS) Then $sHDSTYLES &= "$HDS_STYLES, " ;0x00000002 ; Each item in the control looks and behaves like a push button If BitAND($HDStyle, $HDS_CHECKBOXES) Then $sHDSTYLES &= "$HDS_CHECKBOXES, " ;0x00000400 ; Allows the placing of checkbo ;es on header items on Vista If BitAND($HDStyle, $HDS_DRAGDROP) Then $sHDSTYLES &= "$HDS_DRAGDROP, " ;0x00000040 ; Allows drag-and-drop reordering of header items If BitAND($HDStyle, $HDS_FILTERBAR) Then $sHDSTYLES &= "$HDS_FILTERBAR, " ;0x00000100 ; Include a filter bar as part of the standard header control If BitAND($HDStyle, $HDS_FLAT) Then $sHDSTYLES &= "$HDS_FLAT, " ;0x00000200 ; Control is drawn flat when XP is running in classic mode If BitAND($HDStyle, $HDS_FULLDRAG) Then $sHDSTYLES &= "$HDS_FULLDRAG, " ;0x00000080 ; Column contents are displayed while the user resizes a column If BitAND($HDStyle, $HDS_HIDDEN) Then $sHDSTYLES &= "$HDS_HIDDEN, " ;0x00000008 ; Indicates a header control that is intended to be hidden If BitAND($HDStyle, $HDS_HORZ) Then $sHDSTYLES &= "$HDS_HORZ, " ;0x00000000 ; Creates a header control with a horizontal orientation If BitAND($HDStyle, $HDS_HOTTRACK) Then $sHDSTYLES &= "$HDS_HOTTRACK, " ;0x00000004 ; Enables hot tracking If BitAND($HDStyle, $HDS_NOSIZING) Then $sHDSTYLES &= "$HDS_NOSIZING, " ;0x0800 ; The user cannot drag the divider on the header control on Vista If BitAND($HDStyle, $HDS_OVERFLOW) Then $sHDSTYLES &= "$HDS_OVERFLOW, " ;0x1000 ; A button is displayed when not all items can be displayed within the header control's rectangle on Vista If BitAND($HDStyle, $HDS_DEFAULT) Then $sHDSTYLES &= "$HDS_DEFAULT, " ;0x00000046 ; Default header style $HDS_DRAGDROP + $HDS_HOTTRACK + $HDS_BUTTONS ConsoleWrite("Header Styles= " & $sHDSTYLES & @CRLF) EndFunc ;==>Debug_GetHDStyles Func Debug_GetWSStyles($hWnd) ;#include <WindowsConstants.au3> Local $WSStyle = _WinAPI_GetWindowLong($hWnd, -16) Local $sWSSTYLES Local $WSEXStyle = _WinAPI_GetWindowLong($hWnd, -20) ;_GUICtrlListView_GetExtendedListViewStyle($hListView); Local $sWSEXSTYLES If @error Then ConsoleWrite(" Error Debug_GetWSStyles Couldn't retrieve Styles") Return EndIf If BitAND($WSStyle, $WS_OVERLAPPED) Then $sWSSTYLES &= "$WS_OVERLAPPED, " If BitAND($WSStyle, $WS_TILED) Then $sWSSTYLES &= "$WS_TILED, " If BitAND($WSStyle, $WS_MAXIMIZEBOX) Then $sWSSTYLES &= "$WS_MAXIMIZEBOX, " ;0x00010000 If BitAND($WSStyle, $WS_MINIMIZEBOX) Then $sWSSTYLES &= "$WS_MINIMIZEBOX, " ;0x00020000 If BitAND($WSStyle, $WS_TABSTOP) Then $sWSSTYLES &= "$WS_TABSTOP, " ;0x00010000 If BitAND($WSStyle, $WS_GROUP) Then $sWSSTYLES &= "$WS_GROUP, " ;0x00020000 If BitAND($WSStyle, $WS_SIZEBOX) Then $sWSSTYLES &= "$WS_SIZEBOX, " ;0x00040000 If BitAND($WSStyle, $WS_THICKFRAME) Then $sWSSTYLES &= "$WS_THICKFRAME, " If BitAND($WSStyle, $WS_SYSMENU) Then $sWSSTYLES &= "$WS_SYSMENU, " ;0x00080000 If BitAND($WSStyle, $WS_HSCROLL) Then $sWSSTYLES &= "$WS_HSCROLL, " ;0x00100000 If BitAND($WSStyle, $WS_VSCROLL) Then $sWSSTYLES &= "$WS_VSCROLL, " ;0x00200000 If BitAND($WSStyle, $WS_DLGFRAME) Then $sWSSTYLES &= "$WS_DLGFRAME, " ;0x00400000 If BitAND($WSStyle, $WS_BORDER) Then $sWSSTYLES &= "$WS_BORDER, " ;0x00800000 If BitAND($WSStyle, $WS_CAPTION) Then $sWSSTYLES &= "$WS_CAPTION, " ;0x00C00000 If BitAND($WSStyle, $WS_OVERLAPPEDWINDOW) Then $sWSSTYLES &= "$WS_OVERLAPPEDWINDOW, " If BitAND($WSStyle, $WS_TILEDWINDOW) Then $sWSSTYLES &= "$WS_TILEDWINDOW, " If BitAND($WSStyle, $WS_MAXIMIZE) Then $sWSSTYLES &= "$WS_MAXIMIZE, " ;0x01000000 If BitAND($WSStyle, $WS_CLIPCHILDREN) Then $sWSSTYLES &= "$WS_CLIPCHILDREN, " ;0x02000000 If BitAND($WSStyle, $WS_CLIPSIBLINGS) Then $sWSSTYLES &= "$WS_CLIPSIBLINGS, " ;0x04000000 If BitAND($WSStyle, $WS_DISABLED) Then $sWSSTYLES &= "$WS_DISABLED, " ;0x08000000 If BitAND($WSStyle, $WS_VISIBLE) Then $sWSSTYLES &= "$WS_VISIBLE, " ;0x10000000 If BitAND($WSStyle, $WS_MINIMIZE) Then $sWSSTYLES &= "$WS_MINIMIZE, " ;0x20000000 If BitAND($WSStyle, $WS_ICONIC) Then $sWSSTYLES &= "$WS_ICONIC, " If BitAND($WSStyle, $WS_CHILD) Then $sWSSTYLES &= "$WS_CHILD, " ;0x40000000 If BitAND($WSStyle, $WS_CHILDWINDOW) Then $sWSSTYLES &= "$WS_CHILDWINDOW, " If BitAND($WSStyle, $WS_POPUP) Then $sWSSTYLES &= "$WS_POPUP, " ;0x80000000 If BitAND($WSStyle, $WS_POPUPWINDOW) Then $sWSSTYLES &= "$WS_POPUPWINDOW, " ;0x80880000 If BitAND($WSEXStyle, $WS_EX_ACCEPTFILES) Then $sWSEXSTYLES &= "$WS_EX_ACCEPTFILES, " ;0x00000010 If BitAND($WSEXStyle, $WS_EX_APPWINDOW) Then $sWSEXSTYLES &= "$WS_EX_APPWINDOW, " ;0x00040000 If BitAND($WSEXStyle, $WS_EX_COMPOSITED) Then $sWSEXSTYLES &= "$WS_EX_COMPOSITED, " ;0x02000000 If BitAND($WSEXStyle, $WS_EX_CONTROLPARENT) Then $sWSEXSTYLES &= "$WS_EX_CONTROLPARENT, " ;0x10000 If BitAND($WSEXStyle, $WS_EX_CLIENTEDGE) Then $sWSEXSTYLES &= "$WS_EX_CLIENTEDGE, " ;0x00000200 If BitAND($WSEXStyle, $WS_EX_CONTEXTHELP) Then $sWSEXSTYLES &= "$WS_EX_CONTEXTHELP, " ;0x00000400 If BitAND($WSEXStyle, $WS_EX_DLGMODALFRAME) Then $sWSEXSTYLES &= "$WS_EX_DLGMODALFRAME, " ;0x00000001 If BitAND($WSEXStyle, $WS_EX_LAYERED) Then $sWSEXSTYLES &= "$WS_EX_LAYERED, " ;0x00080000 If BitAND($WSEXStyle, $WS_EX_LAYOUTRTL) Then $sWSEXSTYLES &= "$WS_EX_LAYOUTRTL, " ;0x400000 If BitAND($WSEXStyle, $WS_EX_LEFT) Then $sWSEXSTYLES &= "$WS_EX_LEFT, " ;0x00000000 If BitAND($WSEXStyle, $WS_EX_LEFTSCROLLBAR) Then $sWSEXSTYLES &= "$WS_EX_LEFTSCROLLBAR, " ;0x00004000 If BitAND($WSEXStyle, $WS_EX_LTRREADING) Then $sWSEXSTYLES &= "$WS_EX_LTRREADING, " ;0x00000000 If BitAND($WSEXStyle, $WS_EX_MDICHILD) Then $sWSEXSTYLES &= "$WS_EX_MDICHILD, " ;0x00000040 If BitAND($WSEXStyle, $WS_EX_NOACTIVATE) Then $sWSEXSTYLES &= "$WS_EX_NOACTIVATE, " ;0x08000000 If BitAND($WSEXStyle, $WS_EX_NOINHERITLAYOUT) Then $sWSEXSTYLES &= "$WS_EX_NOINHERITLAYOUT, " ;0x00100000 If BitAND($WSEXStyle, $WS_EX_NOPARENTNOTIFY) Then $sWSEXSTYLES &= "$WS_EX_NOPARENTNOTIFY, " ;0x00000004 If BitAND($WSEXStyle, $WS_EX_RIGHT) Then $sWSEXSTYLES &= "$WS_EX_RIGHT, " ;0x00001000 If BitAND($WSEXStyle, $WS_EX_RIGHTSCROLLBAR) Then $sWSEXSTYLES &= "$WS_EX_RIGHTSCROLLBAR, " ;0x00000000 If BitAND($WSEXStyle, $WS_EX_RTLREADING) Then $sWSEXSTYLES &= "$WS_EX_RTLREADING, " ;0x2000 If BitAND($WSEXStyle, $WS_EX_STATICEDGE) Then $sWSEXSTYLES &= "$WS_EX_STATICEDGE, " ;0x00020000 If BitAND($WSEXStyle, $WS_EX_TOOLWINDOW) Then $sWSEXSTYLES &= "$WS_EX_TOOLWINDOW, " ;0x00000080 If BitAND($WSEXStyle, $WS_EX_TOPMOST) Then $sWSEXSTYLES &= "$WS_EX_TOPMOST, " ;0x00000008 If BitAND($WSEXStyle, $WS_EX_TRANSPARENT) Then $sWSEXSTYLES &= "$WS_EX_TRANSPARENT, " ;0x00000020 If BitAND($WSEXStyle, $WS_EX_WINDOWEDGE) Then $sWSEXSTYLES &= "$WS_EX_WINDOWEDGE, " ;0x00000100 If BitAND($WSEXStyle, $WS_EX_OVERLAPPEDWINDOW) Then $sWSEXSTYLES &= "$WS_EX_OVERLAPPEDWINDOW, " If BitAND($WSEXStyle, $WS_EX_PALETTEWINDOW) Then $sWSEXSTYLES &= "$WS_EX_PALETTEWINDOW, " ConsoleWrite("WS Styles= " & $sWSSTYLES & @CRLF) ConsoleWrite("WS EX Styles= " & $sWSEXSTYLES & @CRLF) EndFunc ;==>Debug_GetWSStyles  
×