1

Тема: AHK: Масштабирование в gdi+

Имеется стандартное окно gui, на котором расположен элемент управления picture c заданным хендлом, то бишь:

Gui, Add, Pic, x10 y10 w400 h400 hwndhPic  gRepaint 

после создания окна к этой картинке привязывается график с возможностью рисования на нем:


   hbm := CreateDIBSection(Width, Height)
   hdc := CreateCompatibleDC()
   obm := SelectObject(hdc, hbm)
   G := Gdip_GraphicsFromHDC(hdc)
   Gdip_SetSmoothingMode(G, 2)              
   Gdip_FillRoundedRectangle(G, pWhiteBrush, 0, 0, Width, Height, 2) 
   hPicDC := GetDC(hPic)  
   BitBlt(hPicDC, 0, 0, Width, Height, hdc, 0, 0) 
 

Далее в этом контроле можно чего-нибудь рисовать, ну это уже обсужденная тема. Вопрос в другом.
Если теперь прикрутить к этой картинке возможность изменять ее размеры при помощи guicontrol, move..., а также заставить ее при этом перерисовываться при помощи BitBlt(hPicDC, 0, 0, Width, Height, hdc, 0, 0), то можно будет сдвигать ее края, что приведет к обычной обрезке получившегося рисунка.
Вопрос такой: есть ли возможность при помощи средств AHK и gdip сделать так, чтобы рисунок не обрезался, а масштабировался?

2

Re: AHK: Масштабирование в gdi+

Используй StretchBlt(), она работает аналогично BitBlt(), но с возможностью масштабирования.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Масштабирование в gdi+

Точно. Все работает. Спасибо.