매크로

조회 수 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
분류 제목 글쓴이 최근변경 추천
자유 DropDownList 와 IniRead 불러온 값으로 선택되게 할려... 10 Rabbit 2018.06.23 0/0
질문 Dropdownlist 연동관련 질문드리겠습니다 22 최원태 2015.10.25 0/0
질문 Dropdownlist 에서 선택하지않으면 에러납니다. 4 우리강아지 2016.05.29 0/0
질문 Dropdownlist 에 항목을 추가 하는 방법이 궁금합니다 3 레이븐 2014.12.16 0/0
질문 Dropdownlist 기본값 줄수 없나요?? 3 yodda 2014.12.21 0/0
질문 dropdownlist , ini 질문이요~ 4 화임 2015.07.12 0/0
질문 document가 뭔가요? 힌트좀 주세요. 정직한 2016.10.30 0/0
질문 document.getElementsByClassName 여러조건?에맞는결과... 1 _Crash 2015.09.15 0/0
질문 document 엔터입력 1 _Crash 2016.04.16 0/0
질문 dll참조에 관한 고수님있으시나요? 8 리키레이 2016.02.08 0/0
질문 DLL관련 변수선언, Guicontrol관련 질문. 2 아잉뿌잉 2015.07.06 0/0
질문 dllcall로 autohotkey.dll이 호출 안되는 현상 하연데디 2016.10.28 0/0
질문 dllcall(keybd_event) 비활성화는 안되나요>? 2 끼엣ㅅㅅ 2019.04.09 0/0
질문 dllcall 질문드려요 광대승천 2020.07.24 0/0
질문 dllcall 사용법 질문! 키리야 2017.12.10 0/0
정보 DllCall "mouse_event" 속도조절하는 법 rkfdma 2016.12.08 0/0
질문 dll 과 인젝션에 관한문의 오핫충 2018.01.21 0/0
질문 DDL을 통해 Winget으로 지니모션 창을 따올때.. 5 아잉뿌잉 2015.06.24 0/0
질문 ddl 창 선택후 해상도 및 상위 고정법좀 알려주세요. 2 아잉뿌잉 2015.02.26 0/0
질문 DDL 질문있어요 1 으뜸어린이 2019.06.26 0/0
Board Pagination Prev 1 ... 195196197198199200201202203 ... 209 Next
/ 209

전체 최신 인기글

전체 주간 인기글