본문 바로가기
컴퓨터/Windows API

[C/C++] 윈도우즈 시계 프로그램

by stdFrog 2022. 9. 23.

 

아무래도 공부 기간이 길어지다 보니 블로그에 신경 쓸 겨를이 없다. 당분간, 간단한 프로그램을 몇 가지 만들고 예시 코드를 올릴 예정이다.

 

위 사진에서 우측 상단에 있는 투박한 네모 상자가 결과물이다.

더보기
LRESULT CALLBACK M_WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam){
        HDC hdc;
        PAINTSTRUCT ps;
        HFONT hFont, cFont;
        static char szTime[100];
        time_t t;

        switch(iMessage){
                case WM_CREATE:
                        SetTimer(hWnd, 1, 1000, NULL);
                        SendMessage(hWnd, WM_TIMER, 1,0);
                        hFont = CreateFont( 12,
                                        0,
                                        GM_COMPATIBLE,
                                        0,
                                        FW_DONTCARE,
                                        0, 0, 0,
                                        HANGUL_CHARSET,
                                        OUT_OUTLINE_PRECIS,
                                        CLIP_DEFAULT_PRECIS,
                                        CLEARTYPE_QUALITY,
                                        VARIABLE_PITCH,
                                        TEXT("consolas")
                                        );
                        return 0;

                case WM_TIMER:
                        RECT crt;
                        time(&t);
                        strftime(szTime, 100, TEXT("%H:%M:%S"), localtime(&t));
                        GetClientRect(hWnd, &crt);
                        InvalidateRect(hWnd, &crt, TRUE);
                        return 0;

                case WM_PAINT:
                        hdc = BeginPaint(hWnd, &ps);
                        cFont = (HFONT)SelectObject(hdc, hFont);
                        TextOut(hdc, 0,0, szTime, strlen(szTime));
                        SelectObject(hdc, cFont);
                        EndPaint(hWnd, &ps);
                        return 0;

                case WM_KEYDOWN:
                        if(wParam == VK_ESCAPE){
                                SendMessage(hWnd, WM_CLOSE, 0,0);
                        }
                        return 0;

                case WM_CLOSE:
                        if(MessageBox(hWnd, TEXT("Shutdown?"), TEXT("MyClock Prg"), MB_YESNO) == IDYES){
                                DestroyWindow(hWnd);
                        }
                        return 0;

                case WM_DESTROY:
                        KillTimer(hWnd, 1);
                        DeleteObject(hFont);
                        PostQuitMessage(0);
                        return 0;
        }
        return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}

 

종료할 땐 Esc키를 눌러 종료한다.

코드 길이에 비해 결과물이 귀엽다는 특징이 있다.

반응형

'컴퓨터 > Windows API' 카테고리의 다른 글

[C/C++] GUI 타이머 프로그램  (1) 2022.10.15
[C/C++] 윈도우즈 시계 프로그램2  (0) 2022.09.26

댓글