Что нового

Помогите с тенью окна

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Версия AutoIt:3.

Описание:Нашёл на официяльном форуме функцию для добавления тени к окну,минус в том что в скиновых POPUP окнах тень отображается не корректно,хочу узнать можно ли подогнать функцию к POPUP(скиновое)?
Код:
Func _GuiSetDropShadow($hwnd, $fDisrespectUser = True)
    If Not IsHWnd($hwnd) Then Return SetError(1, 1, 0)
    
  ;check if hWnd is from current process
    Local $aResult = DllCall("User32.dll", "int", "GetWindowThreadProcessId", "hwnd", $hwnd, "int*", 0)
    If @error Or $aResult[2] <> @AutoItPID Then Return SetError(@error, 2, 0)
    
    If Not IsDeclared("SPI_GETDROPSHADOW") Then Local Const $SPI_GETDROPSHADOW = 0x1024
    If Not IsDeclared("SPI_SETDROPSHADOW") Then Local Const $SPI_SETDROPSHADOW = 0x1025
    If Not IsDeclared("CS_DROPSHADOW") Then Local Const $CS_DROPSHADOW = 0x00020000
    If Not IsDeclared("GCL_STYLE") Then Local Const $GCL_STYLE = -26
    
    $aResult = DllCall("user32.dll", "int", "SystemParametersInfo", "int", $SPI_GETDROPSHADOW, "int", 0, "int*", 0, "int", 0)
    Local $iErr = @error
    If $iErr Or Not IsArray($aResult) Then Return SetError($iErr, 3, 0)
    
   ;if 'Show shadows under menus' option not set, try activating it.
    If Not $aResult[3] And $fDisrespectUser Then
       ;turn on drop shadows
        $aResult = DllCall("user32.dll", "int", "SystemParametersInfo", "int", $SPI_SETDROPSHADOW, "int", 0, "int", True, "int", 0)
        $iErr = @error
        If $iErr Or Not IsArray($aResult) Or $aResult[0] <> 1 Then Return SetError($iErr, 4, 0)
    EndIf
    
  ;get styles from WndClassEx struct
    $aResult = DllCall("user32.dll", "dword", "GetClassLong", "hwnd", $hwnd, "int", $GCL_STYLE)
    $iErr = @error
    If $iErr Or Not IsArray($aResult) Or Not $aResult[0] Then Return SetError($iErr, 5, 0)
    Local $OldStyle = $aResult[0]

  ;add drop shadow style to styles
    Local $Style = BitOR($OldStyle, $CS_DROPSHADOW)
    
    If StringRight(@OSArch, 2) == "64" Then
      ;if 64 bit windows (NOT TESTED)
      ;see MSDN SetClassLong remarks
      ;$aResult = DllCall("user32.dll", "ulong_ptr", "SetClassLongPtr", "hwnd", $hWnd, "int", $GCL_STYLE, "long_ptr", $Style)
      ;$iErr = @error
      ;If $iErr Or Not IsArray($aResult) Or Not $aResult[0] Then Return SetError($iErr, 6, 0)
    Else
        $aResult = DllCall("user32.dll", "dword", "SetClassLong", "hwnd", $hwnd, "int", $GCL_STYLE, "long", $Style)
        $iErr = @error
        If $iErr Or Not IsArray($aResult) Or Not $aResult[0] Then Return SetError($iErr, 7, 0)
        If $aResult[0] = $OldStyle Then Return SetError($iErr, 0, 1)
        Return SetError($iErr, 8, 0)
    EndIf
EndFunc;==>_GuiSetDropShadow


Источник:http://www.autoitscript.com/forum/topic/90917-add-a-drop-shadow-to-native-autoit-gui-forms-and-dialogs/page__p__653789__hl__+_guisetdropshadow__fromsearch__1#entry653789
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Верх