매크로

조회 수 1764 추천 0 댓글 3

공부에 도움이 될까하여... 아래는 그림파일이 아닙니다 소스로 그린거에요(제가 그린건 아니지만;;;)


Zj4I3mss.jpg

;;###############################################예제

;;###############################################



#NoEnv?


;=== Create Gui, OnMessage ===

Gui 1: -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs

hGui := WinExist()

Gui 1: Show, NA

w := 550, h := 280

OnMessage(0x201, "WM_LBUTTONDOWN")



;===GDI+ prepare ===

pToken := Gdip_Startup()

hbm := CreateDIBSection(w, h), hdc := CreateCompatibleDC(), obm := SelectObject(hdc, hbm)

G := Gdip_GraphicsFromHDC(hdc), Gdip_SetSmoothingMode(G, 4)



;=== Background ===

pBrush := Gdip_CreateLineBrushFromRect(0, 0, w, h, 0xff555555, 0xff050505)

Gdip_FillRectangle(G, pBrush, 0, 0, w, h)

Gdip_DeleteBrush(pBrush)


pBrush := Gdip_BrushCreateHatch(0xff000000, 0x00000000, 8)

Gdip_FillRectangle(G, pBrush, 0, 0, w, h)

Gdip_DeleteBrush(pBrush)



;=== Create path (Bat) ===

pPath := Gdip_CreatePath() ; creates a Path (GraphicsPath object)?


Gdip_StartPathFigure(pPath) ; starts a new figure in this Path

Gdip_AddPathLine(pPath, 110,95, 220,95) ; adds a line to the current figure of this path

Gdip_AddPathBezier(pPath, 220,95, 228,112, 233,120, 262,120) ; adds bezier

Gdip_AddPathLines(pPath, "262,120|265,95|269,110|280,110|284,95|287,120") ; adds lines

Gdip_AddPathBezier(pPath, 287,120, 305,120, 320,120, 330,95)

Gdip_AddPathLine(pPath, 330,95, 439,95)

Gdip_AddPathBeziers(pPath, "439,95|406,108|381,126|389,159|322,157|287,170|275,206|262,170|227,157|160,159|168,126|144,109|110,95") ; adds beziers

Gdip_ClosePathFigure(pPath) ; closes the current figure of this path



;=== Fill & draw path (Bat) === ; now when the path is finished, we can fill it with brushes and outline with pens

;pPen := Gdip_CreatePen(0x22ffffff, 14), Gdip_DrawPath(G, pPen, pPath), Gdip_DeletePen(pPen) ; uncomment to draw extra outline


pBrush := Gdip_CreateLineBrushFromRect(0, 95, w, (h-190)/2, 0xff110000, 0xff664040)

Gdip_FillPath(G, pBrush, pPath) ; fill Bat background 1

Gdip_DeleteBrush(pBrush)


pBrush := Gdip_BrushCreateHatch(0xff000000, 0x00000000, 21)

Gdip_FillPath(G, pBrush, pPath) ; fill Bat background 2

Gdip_DeleteBrush(pBrush)


pPen := Gdip_CreatePen(0xffa5a5a5, 5)

Gdip_DrawPath(G, pPen, pPath) ; draw Bat outline 1

Gdip_DeletePen(pPen)


pPen := Gdip_CreatePen(0xff000000, 1)

Gdip_DrawPath(G, pPen, pPath) ; draw Bat outline 2

Gdip_DeletePen(pPen)


Gdip_DeletePath(pPath) ; delete the Path as it is no longer needed and wastes memory



;=== Update, Delete, Shutdown ===

UpdateLayeredWindow(hGui, hdc, (A_ScreenWidth-w)//2, (A_ScreenHeight-h)//2, w, h)

SelectObject(hdc, obm), DeleteObject(hbm), DeleteDC(hdc)

Gdip_DeleteGraphics(G)

Gdip_Shutdown(pToken)

return



Esc::ExitApp



;===Functions===========================================================================

#Include Gdip.ahk


WM_LBUTTONDOWN() {

? ?PostMessage, 0xA1, 2

}


;#####################################################################################

; GraphicsPath functions added by Learning one

;#####################################################################################


; Function ? ? ? ? ? ? ?Gdip_AddPathBeziers

; Description ? ? ? ? ? Adds a sequence of connected B?zier splines to the current figure of this path.

;

; pPath ? ? ? ? ? ? ? ? Pointer to the GraphicsPath

; Points ? ? ? ? ? ? ? ?the coordinates of all the points passed as x1,y1|x2,y2|x3,y3.....

;

; return ? ? ? ? ? ? ? ?status enumeration. 0 = success


; Notes ? ? ? ? ? ? ? ? The first spline is constructed from the first point through the fourth point in the array and uses the second and third points as control points. Each subsequent spline in the sequence needs exactly three more points: the ending point of the previous spline is used as the starting point, the next two points in the sequence are control points, and the third point is the ending point.

?

Gdip_AddPathBeziers(pPath, Points) {

StringSplit, Points, Points, |

VarSetCapacity(PointF, 8*Points0) ??

Loop, %Points0%

{

StringSplit, Coord, Points%A_Index%, `,

NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")

}

return DllCall("gdiplus\GdipAddPathBeziers", "uint", pPath, "uint", &PointF, "int", Points0)

}


Gdip_AddPathBezier(pPath, x1, y1, x2, y2, x3, y3, x4, y4) { ; Adds a B?zier spline to the current figure of this path

return DllCall("gdiplus\GdipAddPathBezier", "uint", pPath

, "float", x1, "float", y1, "float", x2, "float", y2

, "float", x3, "float", y3, "float", x4, "float", y4)

}


; Function ? ? ? ? ? ? ?Gdip_AddPathLines

; Description ? ? ? ? ? Adds a sequence of connected lines to the current figure of this path.

;

; pPath ? ? ? ? ? ? ? ? Pointer to the GraphicsPath

; Points ? ? ? ? ? ? ? ?the coordinates of all the points passed as x1,y1|x2,y2|x3,y3.....

;

; return ? ? ? ? ? ? ? ?status enumeration. 0 = success


Gdip_AddPathLines(pPath, Points) {

StringSplit, Points, Points, |

VarSetCapacity(PointF, 8*Points0) ??

Loop, %Points0%

{

StringSplit, Coord, Points%A_Index%, `,

NumPut(Coord1, PointF, 8*(A_Index-1), "float"), NumPut(Coord2, PointF, (8*(A_Index-1))+4, "float")

}

return DllCall("gdiplus\GdipAddPathLine2", "uint", pPath, "uint", &PointF, "int", Points0)

}


Gdip_AddPathLine(pPath, x1, y1, x2, y2) {

return DllCall("gdiplus\GdipAddPathLine", "uint", pPath

, "float", x1, "float", y1, "float", x2, "float", y2)

}


Gdip_AddPathArc(pPath, x, y, w, h, StartAngle, SweepAngle) {

return DllCall("gdiplus\GdipAddPathArc", "uint", pPath, "float", x, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)

}


Gdip_AddPathPie(pPath, x, y, w, h, StartAngle, SweepAngle) {

return DllCall("gdiplus\GdipAddPathPie", "uint", pPath, "float", x, "float", y, "float", w, "float", h, "float", StartAngle, "float", SweepAngle)

}


Gdip_StartPathFigure(pPath) { ; Starts a new figure without closing the current figure. Subsequent points added to this path are added to the new figure.

return DllCall("gdiplus\GdipStartPathFigure", "uint", pPath)

}


Gdip_ClosePathFigure(pPath) { ; Closes the current figure of this path.

return DllCall("gdiplus\GdipClosePathFigure", "uint", pPath)

}


; Function ? ? ? ? ? ? ?Gdip_DrawPath

; Description ? ? ? ? ? draws a sequence of lines and curves defined by a GraphicsPath object

;

; pGraphics ? ? ? ? ? ? Pointer to the Graphics of a bitmap

; pPen ? ? ? ? ? ? ? ? ?Pointer to a pen

; pPath ? ? ? ? ? ? ? ? Pointer to a Path

;

; return ? ? ? ? ? ? ? ?status enumeration. 0 = success


Gdip_DrawPath(pGraphics, pPen, pPath) {

return DllCall("gdiplus\GdipDrawPath", "uint", pGraphics, "uint", pPen, "uint", pPath)

}


Gdip_WidenPath(pPath, pPen, Matrix=0, Flatness=1) { ; Replaces this path with curves that enclose the area that is filled when this path is drawn by a specified pen. This method also flattens the path.

return DllCall("gdiplus\GdipWidenPath", "uint", pPath, "uint", pPen, "uint", Matrix, "float", Flatness)

}


Gdip_ClonePath(pPath) {

DllCall("gdiplus\GdipClonePath", "uint", pPath, "uint*", pPathClone)

return pPathClone

}














































  • 모바게 2014.12.02 18:34

    gdip를 이용해 그리기가 되는군요..

    감사합니다 ㅋ

  • 따기따기 2014.12.02 22:15
    유용하게 사용하세요^^
  • 로우얄 2014.12.12 15:24

    gdip 어디 배울곳 없을까요?

    강력한 기능인거같은데...

    좀만 응용하면 구이도 이쁘게

    이미지서치도 강력하게

    여러 프로그램 이팩트도 강렬하게 만들 수 있을꺼같은데...


List of Articles
분류 제목 글쓴이 최근변경 추천
정보 아직도 그림판으로 좌표를 알아 내시는건가요?? 6 미치 2014.12.12 0/0
정보 이미지 서치를 했는데 모서리쪽만 클릭을 해서 많이 속... 2 미치 2014.09.22 0/0
정보 블레이드 보스만날시 스킬사용메크로 7 앙꼬호빵 2014.09.20 0/0
정보 (펌)픽셀서치를 대체할 수 있는 비활성픽셀칼라 활용 ... 6 앙꼬호빵 2019.05.26 0/0
정보 지니모션 postmessage 미작동 관련 3 무사시무 2014.10.11 0/0
정보 오토핫키 이미지 서치 테스트용 1 너울 2015.05.04 0/0
정보 혹시나 오토핫키 매크로 직접 만드시는분들~~ 4 프린치크 2014.10.29 0/0
정보 비활성 매크로 예문 남겨드립니다. 참고하세요~ 14 호로록뚝딱 2015.08.12 0/0
정보 pixelcolor 사용법을 알았습니다. 9 으뜸어린이 2017.09.10 0/0
정보 이미지서치 후 비활성 클릭 17 lidmt 2016.07.02 0/0
정보 이미지 서치 비활성 클릭 4 프린치크 2014.11.20 0/0
정보 폴더내 이미지 찾는 Loop 5 묵치기 2014.12.01 0/0
정보 소스 여러 파일로 관리 하는 팁 7 묵치기 2015.01.20 0/0
정보 그리기 / DRAW / GDIP 화면에 선 도형 그리기 (예제) 3 따기따기 2014.12.12 0/0
정보 윈도우의 타이틀바, 보더 없애는 방법. 7 모바게 2014.12.23 0/0
정보 간단한 단축키 ~ 5 앞프론뒷태 2015.03.13 0/0
정보 지니모션 안보이게 하고 매크로 동작 24 Works 2015.04.10 0/0
정보 소개 - Macro Creator (AHK 매크로 제작툴) 14 모바게 2015.08.28 0/0
정보 (안내) 글내용확인하시고 자삭하세요 27 snf 2015.02.23 0/0
정보 노트북 모니터만 끄기? 입니다 모르시는 분들이 계신거... 5 낭군이 2016.09.13 0/0
Board Pagination Prev 1 23456 7 Next
/ 7

전체 최신 인기글

전체 주간 인기글