ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 디바이스 콘텍스트 - Win32
    GUI/GDI 2009. 4. 9. 01:32
    윈도우즈는 디바이스 콘텍스트의 수를 제한한다.
    디바이스 컨텍스트 객체가 파괴될 때, 이와 관련된 모든 GDI 객체의 선택이 해제된다. // ???

    WM_PAINT 메시지가 발생하였을 때
    HDC hDC;
    PAINTSTRUCT ps;
    hDC = BeginPaint(hWnd, &ps);          // DC의 핸들을 얻는다.
    // DC 핸들을 가지고 작업을 한다.
    EndPaint(hWnd, &ps);                      // 사용 후에는 DC를 반드시 반환한다.
     
    윈도우의 클라이언트 영역에 그리(출력)고자 할 때
    HDC hDC;
    hDC = GetDC(hWnd);                       // DC의 핸들을 얻는다.
    // DC 핸들을 가지고 작업을 한다.
    ReleaseDC(hWnd, hDC);                  // 사용 후에는 DC를 반드시 반환한다.
     
    윈도우 클라이언트 영역뿐만 아니라 윈도우 전체 영역에 그리고자 할 때
    HDC hDC;
    hDC = GetWindowDC(hWnd);            // DC의 핸들을 얻는다.
    // DC 핸들을 가지고 작업을 한다.
    ReleaseDC(hWnd, hDC);                  // 사용 후에는 DC를 반드시 반환한다.
     
    BeginPaint, GetDC, GetWindowDC 함수는 비디오 화면 장치에서 윈도우 영역에 대한 DC를 얻는 함수이다. 즉 윈도우 핸들(위에서 hWnd)이 인자로 필요하다. 다음 API 함수 CreateDC는 더 많은 장치에 대한 DC를 생성하여 핸들을 리턴해 준다.
     
    화면 전체(바탕화면) 영역에 그리고자 할 때
    HDC hDC;
    hDC = CreateDC(TEXT(“DISPLAY”), NULL, NULL, NULL);
    // 디스플레이 장치에 대한 DC를 생성한다.
    // DC 핸들을 가지고 작업을 한다.
    DeleteDC(hDC); // DeleteDC로 생성한 DC를 삭제한다.

    프린터 장치에 출력하고자 할 때(Widnows 95/98/ME에서와 Windows NT/2000/XP에서 프린터 정보를 얻는 방법에는 약간의 차이가 있다.)
    HDC hDC = NULL;
    DWORD dwNeeded = 0;
    DWORD dwReturned = 0;
     
    If( GetVersion() & 0x80000000 ) // Windows 95/98/ME
    {
    PRINTER_INFO_5 printInfo5;
    // Windows 95/98/ME 일 경우 PRINTER_INFO5 구조체를 사용한다.
    // EnumPrinters 사용해서 프린터 정보를 받을 버퍼의 크기를 알아낸 후
    // 다시 EnumPrinters로 프린터의 정보를 얻는다.
    EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, NULL, 0,
    &dwNeeded, &dwReturned);
    EnumPrinters(PRINTER_ENUM_DEFAULT, NULL, 5, (PBYTE)&printInfo5,
                 &dwNeeded, &dwReturned);
    hDC = CreateDC(NULL, printInfo5.pPrinterName, NULL, NULL);
    }
    Else // Windows NT/2000/XP
    {
    PRINTER_INFO_4 printInfo4;
    // Windows NT/2000/XP일 경우 PRINTER_INFO_4 구조체를 사용한다.
    EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0,
                 &dwNeeded, &dwReturned);
    EnumPrinters(PRINTER_ENUM_LOCAL, NULL, 4,
                 (PBYTE)&printInfo4, dwNeeded, &dwNeeded, &dwReturned);
     
    hDC = CreateDC(NULL, printInfo4.pPrinterName, NULL, NULL);
    }
    // DC 핸들을 가지고 작업을 한다.
    DeleteDC(hDC); // DC를 삭제한다.
     
    그 밖의 장치(출력장치)에 대해서도 CreateDC로 DC를 생성하고, DeleteDC로 DC를 삭제한다(GetDC 함수 내에서도 CreateDC로 DC를 생성하여 핸들을 얻는다)


    참조 사이트:
Designed by Tistory.