<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Gdi_plus%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%8B%9C%EA%B3%84</id>
	<title>Gdi plus를 이용한 시계 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Gdi_plus%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%8B%9C%EA%B3%84"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Gdi_plus%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%8B%9C%EA%B3%84&amp;action=history"/>
	<updated>2026-07-02T00:02:12Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Gdi_plus%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%8B%9C%EA%B3%84&amp;diff=1185&amp;oldid=prev</id>
		<title>Devcafe: 새 문서:  GDI+를 사용하여 아날로그 시계 및 달력 구현 &lt;source lang=autoit&gt; #include &lt;GDIPlus.au3&gt; #include &lt;Date.au3&gt;  Opt(&quot;MustDeclareVars&quot;, 1)  ; GUI 생성 Local $iWidth = 400, $iHeight = 500 Local $hGUI = GUICreate(&quot;GDI+ Analog Clock&quot;, $iWidth, $iHeight) GUISetState(@SW_SHOW, $hGUI)  ; GDI+ 초기화 _GDIPlus_Startup()  ; 캔버스 크기 설정 Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI) Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeigh...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Gdi_plus%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%8B%9C%EA%B3%84&amp;diff=1185&amp;oldid=prev"/>
		<updated>2024-12-09T23:13:01Z</updated>

		<summary type="html">&lt;p&gt;새 문서:  GDI+를 사용하여 아날로그 시계 및 달력 구현 &amp;lt;source lang=autoit&amp;gt; #include &amp;lt;GDIPlus.au3&amp;gt; #include &amp;lt;Date.au3&amp;gt;  Opt(&amp;quot;MustDeclareVars&amp;quot;, 1)  ; GUI 생성 Local $iWidth = 400, $iHeight = 500 Local $hGUI = GUICreate(&amp;quot;GDI+ Analog Clock&amp;quot;, $iWidth, $iHeight) GUISetState(@SW_SHOW, $hGUI)  ; GDI+ 초기화 _GDIPlus_Startup()  ; 캔버스 크기 설정 Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI) Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeigh...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
GDI+를 사용하여 아날로그 시계 및 달력 구현&lt;br /&gt;
&amp;lt;source lang=autoit&amp;gt;&lt;br /&gt;
#include &amp;lt;GDIPlus.au3&amp;gt;&lt;br /&gt;
#include &amp;lt;Date.au3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Opt(&amp;quot;MustDeclareVars&amp;quot;, 1)&lt;br /&gt;
&lt;br /&gt;
; GUI 생성&lt;br /&gt;
Local $iWidth = 400, $iHeight = 500&lt;br /&gt;
Local $hGUI = GUICreate(&amp;quot;GDI+ Analog Clock&amp;quot;, $iWidth, $iHeight)&lt;br /&gt;
GUISetState(@SW_SHOW, $hGUI)&lt;br /&gt;
&lt;br /&gt;
; GDI+ 초기화&lt;br /&gt;
_GDIPlus_Startup()&lt;br /&gt;
&lt;br /&gt;
; 캔버스 크기 설정&lt;br /&gt;
Local $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)&lt;br /&gt;
Local $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphics)&lt;br /&gt;
Local $hCanvas = _GDIPlus_ImageGetGraphicsContext($hBitmap)&lt;br /&gt;
&lt;br /&gt;
; 달력용 폰트 및 브러시 생성&lt;br /&gt;
Local $hFont = _GDIPlus_FontCreate(&amp;quot;Arial&amp;quot;, 12)&lt;br /&gt;
Local $hBrush = _GDIPlus_BrushCreateSolid(0xFF000000) ; 검정색&lt;br /&gt;
&lt;br /&gt;
; 메인 루프&lt;br /&gt;
While True&lt;br /&gt;
    Local $iMsg = GUIGetMsg()&lt;br /&gt;
&lt;br /&gt;
    If $iMsg = -3 Then ExitLoop&lt;br /&gt;
&lt;br /&gt;
    ; 시계 업데이트&lt;br /&gt;
    UpdateClock($hCanvas, $iWidth / 2, $iHeight / 3, 100)&lt;br /&gt;
&lt;br /&gt;
    ; 달력 표시&lt;br /&gt;
    DrawCalendar($hCanvas, 50, 350, $hFont, $hBrush)&lt;br /&gt;
&lt;br /&gt;
    ; 화면 새로고침&lt;br /&gt;
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, $iWidth, $iHeight)&lt;br /&gt;
    Sleep(1000)&lt;br /&gt;
WEnd&lt;br /&gt;
&lt;br /&gt;
; 자원 해제&lt;br /&gt;
_GDIPlus_FontDispose($hFont)&lt;br /&gt;
_GDIPlus_BrushDispose($hBrush)&lt;br /&gt;
_GDIPlus_GraphicsDispose($hCanvas)&lt;br /&gt;
_GDIPlus_BitmapDispose($hBitmap)&lt;br /&gt;
_GDIPlus_GraphicsDispose($hGraphics)&lt;br /&gt;
_GDIPlus_Shutdown()&lt;br /&gt;
&lt;br /&gt;
Exit&lt;br /&gt;
&lt;br /&gt;
; 함수: 시계 그리기&lt;br /&gt;
Func UpdateClock($hCanvas, $iCenterX, $iCenterY, $iRadius)&lt;br /&gt;
    ; 배경 지우기&lt;br /&gt;
    _GDIPlus_GraphicsClear($hCanvas, 0xFFFFFFFF) ; 흰색 배경&lt;br /&gt;
&lt;br /&gt;
    ; 원 그리기&lt;br /&gt;
    Local $hPenCircle = _GDIPlus_PenCreate(0xFF000000, 3) ; 검정색 원&lt;br /&gt;
    _GDIPlus_GraphicsDrawEllipse($hCanvas, $iCenterX - $iRadius, $iCenterY - $iRadius, $iRadius * 2, $iRadius * 2, $hPenCircle)&lt;br /&gt;
    _GDIPlus_PenDispose($hPenCircle)&lt;br /&gt;
&lt;br /&gt;
    ; 현재 시간 계산&lt;br /&gt;
    Local $aTime = _NowCalcArray()&lt;br /&gt;
    Local $iHour = $aTime[3]&lt;br /&gt;
    Local $iMinute = $aTime[4]&lt;br /&gt;
    Local $iSecond = $aTime[5]&lt;br /&gt;
&lt;br /&gt;
    ; 초침, 분침, 시침 계산 및 그리기&lt;br /&gt;
    DrawClockHand($hCanvas, $iCenterX, $iCenterY, $iRadius * 0.9, $iSecond * 6, 0xFFFF0000, 2) ; 초침 (빨강)&lt;br /&gt;
    DrawClockHand($hCanvas, $iCenterX, $iCenterY, $iRadius * 0.7, $iMinute * 6, 0xFF0000FF, 4) ; 분침 (파랑)&lt;br /&gt;
    DrawClockHand($hCanvas, $iCenterX, $iCenterY, $iRadius * 0.5, ($iHour Mod 12) * 30 + $iMinute * 0.5, 0xFF00FF00, 6) ; 시침 (초록)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; 함수: 시계 바늘 그리기&lt;br /&gt;
Func DrawClockHand($hCanvas, $iCenterX, $iCenterY, $iLength, $iAngle, $iColor, $iThickness)&lt;br /&gt;
    Local $hPen = _GDIPlus_PenCreate($iColor, $iThickness)&lt;br /&gt;
    Local $fAngleRad = $iAngle * (3.14159 / 180) ; 각도를 라디안으로 변환&lt;br /&gt;
    Local $iX = $iCenterX + $iLength * Sin($fAngleRad)&lt;br /&gt;
    Local $iY = $iCenterY - $iLength * Cos($fAngleRad)&lt;br /&gt;
    _GDIPlus_GraphicsDrawLine($hCanvas, $iCenterX, $iCenterY, $iX, $iY, $hPen)&lt;br /&gt;
    _GDIPlus_PenDispose($hPen)&lt;br /&gt;
EndFunc&lt;br /&gt;
&lt;br /&gt;
; 함수: 달력 표시&lt;br /&gt;
Func DrawCalendar($hCanvas, $iX, $iY, $hFont, $hBrush)&lt;br /&gt;
    ; 현재 날짜&lt;br /&gt;
    Local $sDate = _NowCalcDate()&lt;br /&gt;
    Local $sTime = _NowCalcTime()&lt;br /&gt;
&lt;br /&gt;
    ; 날짜와 시간 텍스트&lt;br /&gt;
    _GDIPlus_GraphicsDrawString($hCanvas, &amp;quot;Date: &amp;quot; &amp;amp; $sDate, $hFont, $iX, $iY, $hBrush)&lt;br /&gt;
    _GDIPlus_GraphicsDrawString($hCanvas, &amp;quot;Time: &amp;quot; &amp;amp; $sTime, $hFont, $iX, $iY + 20, $hBrush)&lt;br /&gt;
EndFunc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{틀:요약 &lt;br /&gt;
1.GDI+ 초기화:&lt;br /&gt;
	•	_GDIPlus_Startup()로 GDI+를 시작.&lt;br /&gt;
	•	GUICreate로 GUI 창을 생성 후 GDI+로 화면을 그립니다.&lt;br /&gt;
&lt;br /&gt;
2.시계 그리기:&lt;br /&gt;
	•	UpdateClock 함수는 초침, 분침, 시침의 각도를 계산하고, 이를 DrawClockHand로 호출하여 그립니다.&lt;br /&gt;
	•	시침, 분침, 초침의 길이와 색상을 다르게 설정.&lt;br /&gt;
&lt;br /&gt;
3.	달력 표시:&lt;br /&gt;
	•	DrawCalendar 함수는 현재 날짜와 시간을 GDI+의 텍스트 출력 기능으로 표시합니다.&lt;br /&gt;
&lt;br /&gt;
4.주기적 업데이트:&lt;br /&gt;
	•	Sleep(1000)으로 1초마다 새로 그려 시계와 날짜를 실시간으로 업데이트.&lt;br /&gt;
&lt;br /&gt;
5.자원 해제:&lt;br /&gt;
	•	GDI+ 객체(Brush, Font, Graphics, 등`)를 사용한 뒤 반드시 해제해야 메모리 누수를 방지할 수 있습니다.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* 확장 기능&lt;br /&gt;
1.배경 이미지 추가:&lt;br /&gt;
* _GDIPlus_GraphicsDrawImage를 사용하여 배경 이미지를 추가할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
2.사용자 입력:&lt;br /&gt;
* 달력 날짜를 사용자 입력으로 변경할 수 있는 기능을 추가.&lt;br /&gt;
&lt;br /&gt;
3.초침 애니메이션:&lt;br /&gt;
*Sleep(1000) 대신 더 짧은 시간 간격(예: 100ms)으로 애니메이션 효과를 구현할 수 있습니다.&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>