유돌이

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

'클레스'에 해당되는 글 2

  1. 2008.12.30 MFC (디바이스 컨텍스트와 관련 클래스)
  2. 2008.12.30 const 사용법
2008. 12. 30. 23:16 C/C++/MFC

디바이스 컨텍스트(Device Context)

우리가 화면에 무언가를 출력하기 위해서는 반드시 윈도우즈 os로 부터 화면을 사용할수 있는 권한(디바이스 컨텍스트)를 얻어야함.(문자하나를 화면에 표시하려고 해도 얻어야만 화면출력이 가능)

디바이스 컨텍스트는 화면이나 프린터,플로터등 출력장치에 문자나 그림을 표시하기 위한 정보를 지닌 구조체이다. 윈도우즈에서 프로그램의 모든 출력요구는 디바이스 컨텍스트(DC)를 통해 이뤄진다.

 

GDI(Graphics Device Interface)

윈도우즈가 제공하는 GDI는 서로 다른 구조를 지닌 출력 장치에 대한 정보를 스스로 판단하고 분석하여 실제로 사용해야 할 드라이버를 로드한다. 응용프로그램과 여러 출력 장치간에 의사소통이 원활히 이루어지도록 통역관 역할을 하기때문에 출력장치마다 프로그램을 달리해야하는 프로그래머의 번거로운 작업을 대신해준다.

 

EX) 도화지 : DC   , 그림그리는 도구 : GDI

 

MFC의 디바이스 컨텍스트 관련 클래스

*DC는 무한정제공되는 것이 아니기 때문에 사용후에는 윈도우즈 os에 반납해야함

  DC클래스를 사용하면 DC를 사용후 윈도우즈에 반환해야하는 번거로운 절차가 없다.

 

1.CDC클래스

디바이스 컨텍스트에 대한 기초 클래스로 화면이나 프린터 출력에 관계된 대부분의 멤버함수를  포함한다.

2.CWindowDC

캡션바,메뉴바, 상태바 등 넌클라이언트 영역을 포함한 전체 윈도우를 표시하는 DC를 관리

3.CClientDC

캡션바,메뉴바,상태바 등을 제외한 클라이언트 영역만을 표시하는 DC를 관리

CClientDC의 생성자는 내부적으로 GetDC()함수를 호출하고 소멸자로 ReleaseDC()함수를 호출한다.

4.CPaintDC

WM_PAINT메시지가 발생했을 때 다시 그려져야 할 영역에 대한 DC를 관리하며 WM_PAINT의 메시지 핸들러인 OnPaint()함수에서 사용한다. 윈도우즈에서의 화면복원 기능을 수행하는

부분

내부적으로 BeginPaint()함수를 호출하고 소멸자는 EndPaint()함수를 호출한다.

5.CMetaFileDC

윈도우즈 메타파일(.WMF나 .EMF)에 대한 DC를 관리

메타파일:그래픽 이미지를 생성해낼수 있는 GDI명령들로 구성된 파일 ex)클립아트


'C/C++/MFC' 카테고리의 다른 글

[API]버튼만들기  (0) 2009.01.02
Invalidate() , OnDraw(CDC* pDC)  (0) 2009.01.02
윈도우즈와 메시지  (0) 2008.12.30
API 기초??  (0) 2008.12.30
const 사용법  (0) 2008.12.30
posted by 유돌이
2008. 12. 30. 23:12 C/C++/MFC
const에 대해 정리해봤습니다. 약간 불명확한 부분이 있을수도 있겠네요.

const는 변수, 포인터형, 참조형, 함수, 클레스 등에 붙을수 있음.

1. 변수
예)
    const i = 100;
i 값 변경불가

2. 포인터형 : 기본적으로 2가지 형태가 있을 수 있음. 그외 여려형태가 가능
예1) 값은 변경 불가능하지만 주소는 변경가능한 형태
    int temp = 100, temp2 = 200;
    const int *ipConst = &temp;  // *ipConst 값 변경 불가, ipConst(주소)값은 변경가능
    // int const *ipConst = &temp;  // 이런형태로 써도 위와 같은 의미

    // *ipConst = 300;   // 불가능한 형태
    ipConst = &temp2;  // 가능한 형태

예2) 주소는 변경 불가능하지만 값은 변경가능한 형태
    int temp = 100, temp2 = 200;
    int * const iConstp = &temp;  // *iConstp 값 변경 가능, iConstp(주소)값은 변경불가

    *iConstp = 300;   // 가능한 형태
    //iConstp = &temp2;  // 불가능한 형태

주의 : const가 결합되는 위치가 값인지 주소인지에 유의


3. 참조형
예1) 직접적으로 값과 주소 모두 변경 불가능하지만 참조 원본을 통한 값변경은 가능한 경우
   int temp3 = 100, temp5 = 200;
   int const &ircVal = temp3;  
  
   //ircVal = 2000; // 컴파일 에러 발생 (const 참조는 값 변경불가)
   //ircVal = temp5;  // 주소도  변경불가
   temp3 = 9000;  // 참조 원본은 변경가능, 결과적으로 ircVal의 값도 변하게됨
    

예2) 직접적으로 값과 주소 모두 변경 가능하지만 참조가 가르키는 값은 변화가 없는경우
    int temp4 = 300, temp5 = 500;
    int & const icrVal = temp4;

    icrVal = 6000;  // 값변경 가능, 하지만 값에 변경이 안됨  
    cout << " icrVal " << icrVal << endl;  // 여전히 300이 찍힘
    icrVal = temp5; // 주소도 변경가능 역시 값에 변경이 안됨
    cout << " icrVal " << icrVal << endl;  // 여전히 300이 찍힘

4. 함수 : class의 멤버함수인 경우만 const 함수 사용가능. 해당 class의 멤버변수를 변경할수 없음.
예)
class ConstTest
{
public:
        int m_iA;

        ConstTest()
        {        m_iA = 1;           }
        int const_func1( int &a_iA,  int &a_iB) const
        {
                int a = 1;
                int b = 2;
                int c = 0;

                c = a + b;
                a_iA += 100;  
                // m_iA += 100; // 에러발생. 멤버변수는 변경 불가  
                return m_iA;
        }
};
                

5. 클레스
예)
  const CMyConstClass CC;  
  
  // 내부 멤버변수 전체를 변경불가능한 클레스,(생성자 함수만은 예외)
  // 모든 내부 멤버 함수는 기본적으로 const 함수가 되야만함.
  // 내부 함수의 지역 변수및 인자로 받은 변수는 변경가능.

'C/C++/MFC' 카테고리의 다른 글

MFC (디바이스 컨텍스트와 관련 클래스)  (0) 2008.12.30
윈도우즈와 메시지  (0) 2008.12.30
API 기초??  (0) 2008.12.30
C프로그래밍 별모양~  (0) 2008.12.30
BHO 란?  (0) 2008.12.30
posted by 유돌이
prev 1 next