- Сообщения
- 3,556
- Репутация
- 628
Для своего проекта сделал прозрачный TreeView. смотри пример
если убрать Pic или Pic вернет ошибку (неверен путь, к примеру), то нельзя закрыть родительское окно через системное меню, с объектом Pic, даже если вместо пути пустая строка, все отлично. фокус переносится на родительское окно и его можно свернуть или закрыть.
Что-то не въеду в чем косяк
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <WinAPIEx.au3>
#include <GuiTreeView.au3>
#include <TreeviewConstants.au3>
Global $Form1 = GUICreate("Form1", 592, 382, -1, -1)
GUISetBkColor(0x000000)
$Pic1 = GUICtrlCreatePic("Путь к картинке", 0, 0, 592, 382, $SS_CENTERIMAGE)
GUISetState(@SW_SHOW)
$Tree = _TreeVeiwCreate($Form1, 20, 30, 200, 300, True, $TVS_NOHSCROLL)
GUICtrlSetFont(-1, 9, 800, 0, "Georgia")
GUICtrlSetColor(-1, 0xffffff)
Local $c
For $i = 1 To 30
$c = GUICtrlCreateTreeViewItem('Пункт - ' & $i, $Tree)
GUICtrlCreateTreeViewItem('Подпункт - ' & $i, $c)
Next
_GUICtrlTreeView_Expand($Tree)
Local $gfi = _GUICtrlTreeView_GetFirstItem($Tree)
_GUICtrlTreeView_SelectItem($Tree, $gfi)
While 1
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd
Func _TreeVeiwCreate($hWin, $iLeft, $iTop, $iWidth, $iHeight, $iBorder = True, $iStyle = -1, $iExStyle = -1)
If Not IsHWnd($hWin) Then Return SetError(1)
Local $Border, $DC = _WinAPI_GetDC($hWin)
Local $BkColor = _WinAPI_GetBkColor($DC)
If $iBorder Then $iBorder = $WS_BORDER
Global $hGui = GUICreate("", $iWidth, $iHeight, $iLeft, $iTop, $WS_POPUP + $iBorder, $WS_EX_LAYERED, $hWin)
GUISetBkColor($BkColor)
Global $hTV = GUICtrlCreateTreeView(0, 0, $iWidth + 17, $iHeight, $iStyle, $iExStyle)
_GUICtrlTreeView_SetBkColor($hTV, $BkColor)
GUISetState(@SW_SHOW, $hGui)
_WinAPI_SetParent($hGui, $hWin)
_WinAPI_SetLayeredWindowAttributes($hGui, $BkColor, 255)
GUIRegisterMsg(0x020A, "WM_MOUSEWHEEL")
Return $hTV
EndFunc ;==>_TreeVeiwCreate
Func WM_MOUSEWHEEL($hWndGui, $MsgId, $wParam, $lParam)
Local $GSTWH = BitShift($wParam, 16)
_Scroll($GSTWH)
EndFunc ;==>WM_MOUSEWHEEL
Func _Scroll($Param)
Local $dvis
Local $CursorInfo = GUIGetCursorInfo($hGui)
If Not @error And $CursorInfo[4] = $hTV Then
Local $visf = _GUICtrlTreeView_GetFirstVisible($hTV)
If $Param = 120 Then
Local $prch = _GUICtrlTreeView_GetPrev($hTV, $visf)
_GUICtrlTreeView_EnsureVisible($hTV, $prch)
ElseIf $Param = -120 Then
Local $Hit = _GUICtrlTreeView_GetHeight($hTV)
Local $vc = _GUICtrlTreeView_GetVisibleCount($hTV) * $Hit - 1
Local $gt = _GUICtrlTreeView_HitTestItem($hTV, 0, $vc)
$dvis = _GUICtrlTreeView_GetNext($hTV, $gt)
If Not $dvis Then Return
_GUICtrlTreeView_EnsureVisible($hTV, $dvis)
EndIf
EndIf
EndFunc ;==>_Scroll
Что-то не въеду в чем косяк