Что нового

Как прижать окно созданное функцией MsgBox к углу экрана?

Статус
Закрыто для дальнейших ответов.
A

Alofa

Гость
dr.room
- Если вы хотите учится Autoit, то читайте эту часть справки (+ Эту) и учтите, что данное GUI окно - это лишь имитация MsgBox (причем грубая, слепленная на скорую руку) и поэтому оно не закроется до тех пор пока вы это не сделаете сами.

- Ну а если вам эта работа в тягость, то обратитесь пожалуйста к Модераторам для того, чтобы переместить данную тему в Стол заказов - самый простой и быстрый вариант, да и к вам никаких претензий.
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <WinAPISys.au3>

_My_MsgBox()

Func _My_MsgBox()
	Local $iWidth = 300 ; Ширина окна
	Local $iHeight = 150 ; Высота окна
	Local $iWidthBatt = 88 ; Ширина кнопки
	Local $iHeightBatt = 26 ; Высота кнопки

	$hGui = GUICreate("Мое Окно", $iWidth, $iHeight, -1, -1, $DS_SETFOREGROUND)

	$aClientSize = WinGetClientSize($hGui)
	$tRECT = _WinAPI_GetWorkArea()

;~ 	$iLeft = 0 ; Прижимаем к левому нижнему углу
	$iLeft = DllStructGetData($tRECT, 'Right') - $iWidth ;	Прижимаем к правому нижнему углу
	$iTop = DllStructGetData($tRECT, 'Bottom') - $iHeight

	WinMove($hGui, '', $iLeft, $iTop)
	GUICtrlCreateLabel("Это мое суперское окно!", 0, 0, $aClientSize[0], $aClientSize[1] - 46)
	GUICtrlSetBkColor(-1, 0xFFFFFF)
	$Button = GUICtrlCreateButton("Ok", $iWidth / 2 - $iWidthBatt / 2, $aClientSize[1] - 46 + ((46 - $iHeightBatt) / 2), $iWidthBatt, $iHeightBatt)
	GUISetState()

	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_CLOSE, $Button
				GUIDelete($hGui)
				Return 1
		EndSwitch
	WEnd
EndFunc   ;==>_My_MsgBox


Добавлено:
Сообщение автоматически объединено:

Alofa сказал(а):
dr.room сказал(а):
... я только не понял как изменить положение окна сообщения: в нижний левый или правый угол
[list type=decimal]
[*]Этот скрипт работает только в версиях Autoit до 3.3.10.2, включительно.[/list]
Теперь и в более поздних версиях тоже.(и да простит меня уважаемый CreatoR)
Код:
#Include <WinAPI.au3>

$iLeft = 150 ; Координата левого края окна
$iTop = 150 ; Координата верхнего края окна

_MsgBoxEx(64, 'MsgBoxEx', 'Test', 0, 0, $iLeft, $iTop); Относитесь к этой строке как к вызову штатной функции "MsgBox()", за исключением того что у этой прибавилось еще 2 параметра

;~ ---------------------------------------------------------------------------------------------------------
;~ Ниже идут две пользовательские функции. Переместите их в самый конец скрипта и перестаньте обращать внимание, как будто их нет.
;~ Сами они делать ничего не будут, пока вы их не вызовите, что вы уже и сделали выше.
;~ ---------------------------------------------------------------------------------------------------------

Func _MsgBoxEx($iFlag, $sTitle, $sText, $iTimeout = 0, $hWnd = 0, $iLeft = -1, $iTop = -1)

    Assign('iMsgBoxEx_Left', $iLeft, 2)
    Assign('iMsgBoxEx_Top', $iTop, 2)
    
    Local $CBT_ProcCB = DllCallbackRegister('MsgBoxEx_CBT_Proc', 'long', 'int;hwnd;lparam')
    Local $CBT_Hook = _WinAPI_SetWindowsHookEx($WH_CBT, DllCallbackGetPtr($CBT_ProcCB), 0, _WinAPI_GetCurrentThreadId())
    Local $Ret = MsgBox($iFlag, $sTitle, $sText, $iTimeout, $hWnd)
    Local $Error = @Error
    
    _WinAPI_UnhookWindowsHookEx($CBT_Hook)
    DllCallbackFree($CBT_ProcCB)
    
    Assign('iMsgBoxEx_Left', 0, 2)
    Assign('iMsgBoxEx_Top', 0, 2)
    
    Return SetError($Error, 0, $Ret)
EndFunc

Func MsgBoxEx_CBT_Proc($nCode, $wParam, $lParam)
    If $nCode = 5 Then ; HCBT_ACTIVATE
        Local $iLeft = Eval('iMsgBoxEx_Left')
        Local $iTop = Eval('iMsgBoxEx_Top')
        
        If $iLeft <> -1 Or $iTop <> -1 Then
            Local $aMBPos = WinGetPos($wParam)
            
            If $iLeft = -1 Then
                $iLeft = (@DesktopWidth / 2) - ($aMBPos[2] / 2)
            EndIf
            
            If $iTop = -1 Then
                $iTop = (@DesktopHeight / 2) - ($aMBPos[3] / 2)
            EndIf
            
            WinMove($wParam, '', $iLeft, $iTop)
        EndIf
    EndIf
    
    Return _WinAPI_CallNextHookEx(0, $nCode, $wParam, $lParam)
EndFunc
 

Yashied

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