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