매크로

조회 수 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
분류 제목 글쓴이 최근변경 추천
질문 오토핫키 질문 드립니다!! 1 반수현 2023.02.24 0/0
질문 바람의나라 불홍 심투핵 구합니다. 오뎅윙기 2023.02.24 0/-1
질문 혹시 이미지인식이 옛날 온라인게임도 가능할까요? 노가다게임 2023.02.24 0/0
질문 오핫 커뮤니티 활성화된곳있나여? 1 푸파재대결 2023.02.24 0/0
자유 오핫 연구같이하실분 2 fefe12 2023.02.24 0/0
자유 오토핫키에 대한 고찰 2 fefe12 2023.02.24 1/0
질문 이미지맥스와 오토핫키 비활성클릭 질문 2 츠카다카즈오 2023.02.24 1/0
질문 오토핫키 튕김 1 초보오토핫 2023.02.24 1/0
질문 간단한 매크로 만들때 어떤 프로그램으로 공부하는게 ... 에임1 2021.11.19 0/0
질문 오토핫키는 퍼플 작동 방법이 없을까요? 우후훅 2022.02.09 0/0
질문 오토핫키 관련 질문좀 드리겠습니다.(고수분들) 2 베오토핫 2023.02.24 0/0
질문 오토핫키 텔레그램이나 오픈톡 방 있나요? 1 타조농장 2023.02.24 0/0
자유 언패킹 . 디컴파일 . 부탁드려요 사례 O 게임X 시방초 2023.02.24 0/0
질문 오토핫키 이미지 서치 문의 1 닉길동무 2023.02.24 0/0
질문 포스트메시지로 클릭되는 표시는뜨는데 작동안됨 1 건낚 2023.02.24 0/0
질문 Pause 명령어가 안먹어요 토오키 2023.02.24 0/0
자유 오토핫키 제작의뢰 냠냐미잉 2023.02.24 0/0
질문 오토핫키 이미지서치 여러장 서치하는방법좀 봐주세요 ... 4 매크로찾아삼 2023.02.24 1/0
질문 안녕하세요 ! 돌키우기 유대횽 2023.02.24 0/0
질문 핫린이 한수 여쭙습니다 ^^ 3 ddd123 2023.02.24 2/0
Board Pagination Prev 1 ... 195196197198199200201202203 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글