Что нового

GraphicsDrawImageRect в дочернем окне

angro

Новичок
Сообщения
31
Репутация
1
_GDIPlus_GraphicsDrawImageRect не работает в окне со стилем $WS_CHILD
Картинка находиться в переменной.
Как побороть это ?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
angro [?]
_GDIPlus_GraphicsDrawImageRect не работает в окне со стилем $WS_CHILD
Не подтверждается
Код:
#include <ScreenCapture.au3>
#include <GuiConstants.au3>

$Main = GUICreate("Main")
GUISetState(@SW_SHOW)
$Child = GUICreate("Child", 200, 200, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CHILD), -1, $Main)
GUISetState(@SW_SHOW)

$hBmp = _ScreenCapture_CaptureWnd("", _WinAPI_GetDesktopWindow(), 1, 1, 200, 200)

_GDIPlus_Startup()
$hImg = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
_WinAPI_DeleteObject($hBmp)

$hGraph = _GDIPlus_GraphicsCreateFromHWND($Child)
_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 0, 0, 200, 200)
_GDIPlus_ImageDispose($hImg)

Do
Until GUIGetMsg() = -3

_GDIPlus_GraphicsDispose($hGraph)
_GDIPlus_Shutdown()
 
Автор
A

angro

Новичок
Сообщения
31
Репутация
1
Не работает с чистым $WS_CHILD и в некоторых вариантах не работает $WS_EX_COMPOSITED как в дочернем так и в основном окне. С таким стилем работает в примере BitOR($WS_POPUP, $WS_CHILD), логику не могу проследить, думал дело в $GUI_SS_DEFAULT_GUI

Код:
#include <ScreenCapture.au3>
#include <GuiConstants.au3>

$Main = GUICreate('', 500, 500, Default, Default, $WS_POPUPWINDOW);, $WS_EX_COMPOSITED)
$Child1 = GUICreate('', 150, 150, Default, Default, BitOR($GUI_SS_DEFAULT_GUI, $WS_CHILD), Default, $Main)

GUISetState(@SW_SHOW, $Main)
GUISetState(@SW_SHOW, $Child1)

GUISetBkColor(0xABABAB, $Child1)

_GDIPlus_Startup()
$hBmp = _ScreenCapture_CaptureWnd("", _WinAPI_GetDesktopWindow(), 1, 1, 128, 128)
$hImg = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
$hGraph = _GDIPlus_GraphicsCreateFromHWND($Child1)
_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 5, 5, 128, 128)


Do
Until GUIGetMsg() = -3


_WinAPI_DeleteObject($hBmp)
_GDIPlus_ImageDispose($hImg)
_GDIPlus_GraphicsDispose($hGraph)
_GDIPlus_Shutdown()


К сожалению в проекте вариант BitOR($WS_POPUP, $WS_CHILD) ведёт себя как не дочернее окно, логика такого кода не понятна, поэтому считаю такое решение не верным.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
angro [?]
К сожалению в проекте вариант BitOR($WS_POPUP, $WS_CHILD) ведёт себя как не дочернее окно

Справка сказал(а):
c0dba1b1cfed.png


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

Код:
#include <ScreenCapture.au3>
#include <GUIConstants.au3>

$hParent = GUICreate("", 500, 500, -1, -1, $WS_POPUPWINDOW)
$hChild = GUICreate("", 150, 150, 0, 0, BitOR($WS_VISIBLE, $WS_CHILD), -1, $hParent)
GUISetBkColor(0xABABAB)
GUISwitch($hParent)
GUISetState()

_GDIPlus_Startup()
$hBmp = _ScreenCapture_CaptureWnd("", _WinAPI_GetDesktopWindow(), 1, 1, 128, 128)
$hImg = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
_WinAPI_DeleteObject($hBmp)
$hGraph = _GDIPlus_GraphicsCreateFromHWND($hChild)
_GDIPlus_GraphicsDrawImageRect($hGraph, $hImg, 5, 5, 128, 128)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

_GDIPlus_ImageDispose($hImg)
_GDIPlus_GraphicsDispose($hGraph)
_GDIPlus_Shutdown()



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

Если вы не заметили то проблема в позиции дочернего окна
 
Автор
A

angro

Новичок
Сообщения
31
Репутация
1
В моём примере нет проблем в позиции дочернего окна.
BitOR($WS_VISIBLE, $WS_CHILD) в проекте не создаёт окна совсем.
BitOR($WS_POPUP, $WS_CHILD) не совместим ?, так почему работает в примере ?
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
angro, вы пробовали запустить приложенный код?


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

angro [?]
BitOR($WS_POPUP, $WS_CHILD) не совместим ?, так почему работает в примере ?
angro [?]
вариант BitOR($WS_POPUP, $WS_CHILD) ведёт себя как не дочернее окно
 
Верх