Что нового

Как нарисовать на экране поверх всех окон вот такой прямоугольник?

agikon

Знающий
Сообщения
789
Репутация
16
пожалуйста подскажите где почитать чтобы научится делать на экране монитора всякие фигуры, и чтобы эти фигуры были поверх всех окон.

вот как пример что мне надо вотскрин с красным прямоугольником.
если можете то набросайте код как такой прямоугольник нарисовать, и где в справке про это написано, читал раздел "звук и графика", но там и прибллизительно ничего не нашел.
http://postimage.org/image/2x6pscp2c/
 

Zaramot

I ♥ AutoIt
Сообщения
1 160
Репутация
657
Можно так:
Код:
#include <WindowsConstants.au3>

GUICreate('', 100, 50, 50, 100, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFF0000)
GUISetState()

Sleep(1000)


Вот пример из справки WinAPI от Yashed'а:
Код:
#Include <APIConstants.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global Const $STM_SETIMAGE = 0x0172
Global Const $STM_GETIMAGE = 0x0173

Global $hForm, $Pic, $hPic, $tRECT, $hObj, $hBrush, $hOldBrush, $hPen, $hOldPen, $hFont, $hRgn, $hPattern, $hBitmap, $hSource, $hDev, $hDC, $hSv

Dim $aPoint1[19][2] = [[50, 20], [70, 0], [70, 0], [90, 20], [100, 30], [110, 40], [120, 50], [130, 60], [130, 70], [120, 70], [110, 70], [30, 70], [20, 70], [10, 70], [10, 60], [20, 50], [30, 40], [40, 30], [50, 20]]
Dim $aPoint2[6][2] = [[0, 129], [55, 75], [75, 0], [95, 75], [150, 129], [75, 108]]

; Create GUI
$hForm = GUICreate('MyGUI', 400, 400)
$Pic = GUICtrlCreatePic('', 0, 0, 400, 400)
$hPic = GUICtrlGetHandle($Pic)

; Create bitmap
$hDev = _WinAPI_GetDC($hPic)
$hDC = _WinAPI_CreateCompatibleDC($hDev)
$hSource = _WinAPI_CreateCompatibleBitmapEx($hDev, 400, 400, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))
$hSv = _WinAPI_SelectObject($hDC, $hSource)

; Draw objects
$hOldBrush = _WinAPI_SelectObject($hDC, _WinAPI_GetStockObject($DC_BRUSH))
$hOldPen = _WinAPI_SelectObject($hDC, _WinAPI_GetStockObject($DC_PEN))
_WinAPI_SetDCBrushColor($hDC, 0x990404)
_WinAPI_SetDCPenColor($hDC, 0x990404)
$tRECT = _WinAPI_CreateRect(0, 0, 100, 100)
_WinAPI_OffsetRect($tRECT, 30, 30)
_WinAPI_Rectangle($hDC, $tRECT)
_WinAPI_OffsetRect($tRECT, 20, 20)
_WinAPI_InvertRect($hDC, $tRECT)
_WinAPI_OffsetRect($tRECT, 20, 20)
_WinAPI_InvertRect($hDC, $tRECT)
_WinAPI_SetDCPenColor($hDC, 0x00A820)
_WinAPI_SetBkColor($hDC, _WinAPI_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE)))
$hBrush = _WinAPI_CreateBrushIndirect($BS_HATCHED, 0x00A820, $HS_DIAGCROSS)
$hObj = _WinAPI_SelectObject($hDC, $hBrush)
$tRECT = _WinAPI_CreateRect(0, 0, 140, 140)
_WinAPI_OffsetRect($tRECT, 220, 118)
_WinAPI_Ellipse($hDC, $tRECT)
_WinAPI_SelectObject($hDC, $hObj)
_WinAPI_DeleteObject($hBrush)
_WinAPI_SetTextColor($hDC, 0xCD0091)
_WinAPI_SetBkMode($hDC, $TRANSPARENT)
$hFont = _WinAPI_CreateFont(38, 0, 0, 0, $FW_NORMAL , 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, $DEFAULT_PITCH, 'Arial Black')
$hObj = _WinAPI_SelectObject($hDC, $hFont)
_WinAPI_TextOut($hDC, 30, 185, 'Simple Text')
_WinAPI_SelectObject($hDC, $hObj)
_WinAPI_DeleteObject($hFont)
$hRgn = _WinAPI_CreatePolygonRgn($aPoint2)
_WinAPI_SetDCBrushColor($hDC, 0x0060C4)
_WinAPI_OffsetRgn($hRgn, 25, 240)
_WinAPI_PaintRgn($hDC, $hRgn)
_WinAPI_DeleteObject($hRgn)
_WinAPI_SetDCPenColor($hDC, 0xFF8000)
_WinAPI_OffsetPoints($aPoint1, 219, 25)
_WinAPI_PolyBezier($hDC, $aPoint1)
$hBrush = _WinAPI_CreateBrushIndirect($BS_SOLID, 0xFF8000)
$hObj = _WinAPI_SelectObject($hDC, $hBrush)
_WinAPI_ExtFloodFill($hDC, 70 + 219, 40 + 25, 0xFF8000, 0)
_WinAPI_SelectObject($hDC, $hObj)
_WinAPI_SelectObject($hDC, $hObj)
_WinAPI_DeleteObject($hBrush)
_WinAPI_SetDCPenColor($hDC, 0xFFFFFF)
$hPattern = _WinAPI_LoadImage(0, @ScriptDir & '\Extras\Pattern.bmp', $IMAGE_BITMAP, 0, 0, $LR_LOADFROMFILE)
;$hPattern = _WinAPI_LoadBitmap(_WinAPI_GetModuleHandle(@SystemDir & '\shell32.dll'), 138)
$hBrush = _WinAPI_CreateBrushIndirect($BS_PATTERN, 0, $hPattern)
$hObj = _WinAPI_SelectObject($hDC, $hBrush)
$tRECT = _WinAPI_CreateRect(0, 0, 140, 90)
_WinAPI_OffsetRect($tRECT, 220, 279)
_WinAPI_RoundRect($hDC, $tRECT, 20, 20)
_WinAPI_SelectObject($hDC, $hObj)
_WinAPI_DeleteObject($hPattern)
_WinAPI_DeleteObject($hBrush)

; Merge bitmap
$hBitmap = _WinAPI_CreateCompatibleBitmap($hDev, 400, 400)
$hBrush = _WinAPI_SelectObject($hDC, $hOldBrush)
_WinAPI_DeleteObject($hBrush)
$hPen = _WinAPI_SelectObject($hDC, $hOldPen)
_WinAPI_DeleteObject($hPen)
_WinAPI_SelectObject($hDC, $hBitmap)
_WinAPI_DrawBitmap($hDC, 0, 0, $hSource, $MERGECOPY)
_WinAPI_ReleaseDC($hPic, $hDev)
_WinAPI_SelectObject($hDC, $hSv)
_WinAPI_DeleteObject($hSource)
_WinAPI_DeleteDC($hDC)

; Set bitmap to control
_SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap)
$hObj = _SendMessage($hPic, $STM_GETIMAGE)
If $hObj <> $hBitmap Then
    _WinAPI_DeleteObject($hBitmap)
EndIf

GUISetState()

Do
Until GUIGetMsg() = -3
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
Zaramot
спасибо, то что мне и надо.
этот большой код у меня почемуто с множественными ошибками и не компилирует.
но вот тот первый это то что и мне надо было.
Код:
#include <WindowsConstants.au3>

GUICreate('', 100, 50, 50, 100, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFF00000)
GUISetState()

Sleep(5000)

спасибо.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 703
agikon сказал(а):
спасибо, то что мне и надо.
;D

Что-то я сомневаюсь, что именно это тебе нужно. Вот простейший пример:

Код:
;~#NoTrayIcon

#Include <WindowsConstants.au3>

$hParent  = GUICreate('') ; Чтобы убрать иконку из TaskBar'а (см. далее)
$hForm = GUICreate('', 100, 100, 100, 100, BitOR($WS_DISABLED, $WS_POPUP), $WS_EX_TOPMOST, $hParent) ; Можно без $WS_DISABLED
GUISetBkColor(0xCC0000) ; aka рамка
GUICtrlCreateLabel('', 1, 1, 98, 98) ; aka фон (см. далее)
GUICtrlSetBkColor(-1, 0xFF0000)
WinSetTrans($hForm, '', 192) ; aka прозрачность
GUISetState(@SW_SHOWNOACTIVATE) ; Чтобы не становилось активным в момент запуска

Do
Until GUIGetMsg() = -3
 

Trans

Знающий
Сообщения
257
Репутация
6
Zaramot [?]
Можно так:Код:
Код:
#include <WindowsConstants.au3>

GUICreate('', 100, 50, 50, 100, $WS_POPUP, $WS_EX_TOPMOST)
GUISetBkColor(0xFF0000)
GUISetState()

Sleep(1000)
На мой взгляд сюда мнужно добавить
WinSetOnTop($Form1,"",1)
 

Yashied

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

Кстати, посмотри на Pop-ups UDF, может заинтересует.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Когда-то хулиганил. :smile:
Код:
#NoTrayIcon
#include <WindowsConstants.au3>
#include <WinAPI.au3>

HotKeySet('{ESC}', '_Quit')

$iW = Random(40, 150, 1)
$iH = Random(40, 150, 1)
$hDot_GUI = GUICreate('', $iW, $iH, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
GUISetBkColor(0xFF0000)
$nLabel = GUICtrlCreateLabel('', 0, 0, $iW, $iH)
$hRgn = _WinAPI_CreateRoundRectRgn(0, 0, $iW, $iH, $iW, $iH)
_WinAPI_SetWindowRgn($hDot_GUI, $hRgn)
_WinAPI_DeleteObject($hRgn)
GUISetState(@SW_SHOWNOACTIVATE)

While 1
	WinSetOnTop($hDot_GUI, '', 1)
	$aCursor = GUIGetCursorInfo($hDot_GUI)
	If $aCursor[4] Then
		_WinAPI_MessageBeep(5)
		$iW = Random(40, 150, 1)
		$iH = Random(40, 150, 1)
		WinMove($hDot_GUI, '', Random(10, @DesktopWidth - $iW * 2, 1), Random(10, @DesktopHeight - $iH * 2, 1), $iW, $iH)
		If Mod($iW + $iH, 2) Then
			$hRgn = _WinAPI_CreateRoundRectRgn(0, 0, $iW, $iH, $iW, $iH)
			_WinAPI_SetWindowRgn($hDot_GUI, $hRgn)
			_WinAPI_DeleteObject($hRgn)
		Else
			$hRgn = _WinAPI_CreateRoundRectRgn(0, 0, $iW, $iH, 0, 0)
			_WinAPI_SetWindowRgn($hDot_GUI, $hRgn)
			_WinAPI_DeleteObject($hRgn)
		EndIf
		GUISetBkColor(Random(0, 16777215, 65793), $hDot_GUI)
	EndIf
	Sleep(10)
WEnd

Func _Quit()
	Exit
EndFunc   ;==>_Quit
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
16
спасибо очень хорошие примеры.
 

zalola181

Новичок
Сообщения
30
Репутация
0
А можно и мне Спасибо сказать))) - Спасибо тоже нужное мне оказалось при малой грамотности)
 
Верх