블로그 이미지
하루, 글. 그림. 영상매체. 표현을 도와주는 기기들. 도전 중. 동화다아아
    동화다아아

    카테고리

    분류 전체보기 (176)
    잡담 (1)
    IT 기기-리뷰&뉴스 (7)
    리뷰 - 도서 (1)
    리뷰 - 영상 (0)
    리뷰 - 그림/음악 (1)
    내장형 하드웨어 (163)
    Total
    Today
    Yesterday


    #include "MsgProc.h"
    #include "resource.h"

    int sx, sy, oldx, oldy;
    int iMenu;

    BOOL bNowDraw = FALSE;

    LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
    {
    return 0;
    }
    LRESULT OnCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
    {
    switch(LOWORD(wParam))
    {
    case ID_FILE_MENU1: // 자유 곡선 모드
    iMenu = 1;
    break;
    case ID_FILE_MENU2: // 선 모드
    iMenu = 2;
    break;
    case ID_FILE_MENU3: // 원 모드
    iMenu = 3;
    break;
    case ID_FILE_MENU4: // 사각형 모드
    iMenu = 4;
    break;
    case ID_FILE_EXIT:
    DestroyWindow(hWnd);
    break;
    }
    return 0;
    }
    LRESULT OnLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
    {
    sx = LOWORD(lParam); // 각 좌표가 저장되고 이것을 다시 oldx에 삽입
    sy = HIWORD(lParam); // 처음 마우스를 누른 위치
    oldx = sx; 
    oldy = sy;
    bNowDraw = TRUE; // 그림을 그린다.
    return 0;
    }
    LRESULT OnMouseMove(HWND hWnd, WPARAM wParam, LPARAM lParam)
    {
    HDC hdc;
    hdc = GetDC(hWnd); 
    switch(iMenu)
    {
    case 1:
    if(bNowDraw==TRUE)
    {
    MoveToEx(hdc,sx, sy, NULL);
    sx = LOWORD(lParam);
    sy = HIWORD(lParam);
    LineTo(hdc, sx, sy);
    ReleaseDC(hWnd, hdc);
    }
    break;
    case 2:
    if(bNowDraw)
    {
    SetROP2(hdc, R2_NOT); // 반전모드 이용
    MoveToEx(hdc, sx, sy, NULL); 
    LineTo(hdc, oldx, oldy); // oldx = sx, oldy = sy
    oldx = LOWORD(lParam); // 새로운 값을 읽는다.(MouseMove된 현재 좌표)
    oldy = HIWORD(lParam); // 지워져야 할 선의 끝 좌표
    MoveToEx(hdc, sx, sy, NULL); // 마우스 클릭시 현재 좌표
    LineTo(hdc, oldx, oldy); // 최종 이동된 좌표
    ReleaseDC(hWnd, hdc);
    }
    break;
    case 3:
    if(bNowDraw)
    {
    SetROP2(hdc,R2_NOTXORPEN);
    Ellipse(hdc, sx, sy, oldx, oldy); // oldx = sx, oldy = sy
    oldx = LOWORD(lParam); // 새로운 값을 읽는다.(MouseMove된 현재 좌표)
    oldy = HIWORD(lParam); // 지워져야 할 선의 끝 좌표
    SelectObject(hdc, GetStockObject(NULL_BRUSH));
    Ellipse(hdc, sx, sy, oldx, oldy); // oldx = sx, oldy = sy
    ReleaseDC(hWnd, hdc);
    }
    break;
    case 4:
    if(bNowDraw)
    {
    SetROP2(hdc,R2_NOTXORPEN);
    Rectangle(hdc, sx, sy, oldx, oldy); // oldx = sx, oldy = sy
    oldx = LOWORD(lParam); // 새로운 값을 읽는다.(MouseMove된 현재 좌표)
    oldy = HIWORD(lParam); // 지워져야 할 선의 끝 좌표
    SelectObject(hdc, GetStockObject(NULL_BRUSH));
    Rectangle(hdc, sx, sy, oldx, oldy); // oldx = sx, oldy = sy
    ReleaseDC(hWnd, hdc);
    }
    break;
    }
    return 0;
    }
    LRESULT OnLButtonUp(HWND hWnd, WPARAM wParam, LPARAM lParam)
    {
    HDC hdc;
    hdc = GetDC(hWnd);
    switch(iMenu)
    {
    case 1:
    bNowDraw = FALSE;
    break;
    case 2:
    bNowDraw = FALSE;
    MoveToEx(hdc, sx, sy, NULL);
    LineTo(hdc, oldx, oldy);
    ReleaseDC(hWnd, hdc);
    break;
    case 3:
    bNowDraw = FALSE;
    SelectObject(hdc, GetStockObject(NULL_BRUSH));
    Ellipse(hdc, sx, sy, oldx, oldy); 
    ReleaseDC(hWnd, hdc);
    break;
    case 4:
    bNowDraw = FALSE;
    SelectObject(hdc, GetStockObject(NULL_BRUSH));
    Rectangle(hdc, sx, sy, oldx, oldy); 
    ReleaseDC(hWnd, hdc);
    break;
    }
    return 0;
    }
    LRESULT OnLbuttonDblclk(HWND hWnd, WPARAM wParam, LPARAM lParam)
    {
    InvalidateRect(hWnd, NULL, TRUE); // 화면 클리어
    return 0;
    }
    LRESULT OnDestroy(HWND hwnd, WPARAM wParam, LPARAM lParam)
    {
    PostQuitMessage(0);
    return 0;
    }


    - 실행 결과

     

    '내장형 하드웨어 > WINAPI' 카테고리의 다른 글

    WINAPI - Font  (0) 2011.09.16
    WINAPI - 비트맵 출력, 메모리 DC  (0) 2011.09.15
    WINAPI - 그리기 모드  (0) 2011.09.09
    WINAPI - 그래픽(색상)  (0) 2011.09.08
    WINAPI - 그래픽(GDI 오브젝트)  (0) 2011.09.07
    Posted by 동화다아아
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함