mfc 그림판 예제

Compartir

2/08/2019

Por

Categoría: Sin categoría

Comentarios: 0

다음은 WM_PAINT 메시지를 처리하기 위해 만들어진 OnPaint 처리기입니다. Cview::OnPaint 멤버 함수의 기본 구현은 이러한 장치 컨텍스트를 만들고 클래스의 OnDraw 멤버 함수에 전달합니다(일반적으로 뷰의 응용 프로그램별 도면을 제공하기 위해 재정의됨). 다음은 CPaintDC: 목록 상자를 사용하여 항목 목록을 로드하는 방법을 보여 주는 짧은 예제입니다. 사용자는 목록 상자를 사용하여 항목을 추가, 선택 및 삭제할 수 있습니다. CListBox 예제: MFC… WM_PAINT 처리기 내부에서 BeginPaint를 사용하는 것은 WM_PAINT 외부에서 사용하지 않는 것과 마찬가지로 중요합니다. 이는 BeginPaint 함수 호출 내부에서 필요한 경우 Windows에서 WM_ERASEBKGND 메시지와 WM_NCPAINT 메시지를 생성할 수 있기 때문입니다. WM_PAINT 처리기 내부에 BeginPaint를 호출하지 않으면 창 테두리가 제대로 업데이트되지 않을 수 있습니다. VC ++ MFC 튜토리얼 : GDI, 페인트, CPaintDC, 온 페인트, WM_PAINT로 만든 HDC를 확보하기 위해 사용해야 하는 기능은 EndPaint입니다. BeginPaint는 페인트 작업 중에 커서가 페인팅되는 것을 방지하기 위해 HideCursor를 호출하고 EndPaint가 ShowCursor를 호출하여 다시 표시되도록 하기 때문에 다른 DC 구축함 중 하나가 아닌 EndPaint를 호출하는 것이 중요합니다. EndPaint가 호출되지 않으면 BeginPaint 후에 커서에 이상한 이상이 발생할 수 있습니다.

시작 페인트 및 EndPaint에 대 한 호출은 MFC 및 WTL의 클래스 CPaintDC에 캡슐화 됩니다. 스택에 이 DC의 인스턴스를 생성하기만 하면 개발자를 위해 DC가 자동으로 만들어지고 소멸됩니다. 다음은 이 클래스의 MFC 버전의 생성자 및 소멸자에 대한 코드입니다: BeginPaint를 사용하여 DC에 대한 핸들을 얻으려면 대상 창에 대한 핸들과 PAINTSTRUCT 구조가 필요합니다. PAINTSTRUCT는 이 수준에서 중요하지 않은 BeginPaint를 호출할 때 현재 페인팅 세션에 대한 정보를 보유합니다. BeginPaint는 또한 만드는 DC에 핸들을 반환하며 이것이 우리가 관심있는 값입니다. 다음은 BeginPaint를 호출하는 방법의 예입니다. CPaintDC 클래스는 생성자 및 소멸자에서 BeginPaint 및 EndPaint에 대한 호출을 캡슐화합니다. 이 클래스는 WM_PAINT 메시지에 응답할 때 사용되도록 설계되었습니다. WIN32 페인트 API로 작업하는 동안 항상 HDC(장치 컨텍스트)에 대한 핸들을 얻을 수 있습니다. 앞에서 설명한 모든 유형의 DC는 HDC에 저장할 수 있습니다. 이 가이드에서는 다른 DC가 고급 용도로 사용되기 때문에 클라이언트 DC를 가져오는 방법만 설명합니다.

보기가 잘못되면 Windows에서 WM_PAINT 메시지를 보냅니다. 뷰의 OnPaint 처리기 함수는 클래스 CPaintDC의 장치 컨텍스트 개체를 만들어 메시지에 응답하고 뷰의 OnDraw 멤버 함수를 호출합니다. 일반적으로 재정의 OnPaint 처리기 함수를 작성할 필요가 없습니다.