Win32 UI에서 작업 중입니다. GetDC와 BeginPaint의 차이점을 알고 싶습니다. 어떤 API를 사용해야하는지, 어떤 API를 사용하지 않을 것인지.GetDC()와 BeginPaint()의 차이점
답변
GetDC는 장치 컨텍스트에 대한 핸들을 반환하기 만하면 언제든지 자신의 그리기를 수행 할 수 있습니다. 반면에 BeginPaint는 페인팅을위한 창을 준비하고 페인트해야 할 부분에 대한 정보 (예 : 배경을 다시 칠할 필요가 있는지, 그리고 그려야 할 직사각형과 같은 정보)를 제공합니다.
각 경우를 사용하는 예는? BeginPaint는 WM_PAINT 핸들러에서 가장 일반적으로 볼 수 있습니다 (MSDN : WM_PAINT 메시지에 대한 응답을 제외하고 응용 프로그램은 BeginPaint를 호출하면 안됩니다.) BeginPaint에 대한 각 호출에는 EndPaint 함수에 대한 호출이 있어야합니다. GetDC는 어디에서나 사용할 수 있으므로 외부 창에 그리려면 필요합니다. 기본적으로 언제든지 WM_PAINT 처리기에 없습니다. BeginPaint와 EndPaint는 캐럿에도 약간의 영향을줍니다. 자세한 내용은 msdn을 참조하십시오.
BeginPaint
은 WM_PAINT
메시지에 대해서만 호출 할 수 있습니다. 획득 한 디바이스 콘텍스트는 윈도우의 무효화 된 영역 (redrawn)을 가리킨다. 그런 다음 EndPaint
을 사용하여 릴리스해야합니다.
GetDC
언제든지 호출 할 수 있습니다. 획득 한 디바이스 콘텍스트는 윈도우의 전체 클라이언트 영역을 가리킨다. 그것을 공개하려면 ReleaseDC
으로 전화해야합니다.
GetDC()는 이 아니며은 Begin + EndPaint()를 대신합니다. 시도해 보면 UI 스레드가 100 % CPU 코어를 시작하고 WM_PAINT 핸들러가 반복적으로 호출된다는 것을 알 수 있습니다.
큰 것은 EndPaint()이며, 창의 업데이트 영역을 지 웁니다. PAINTSTRUCT.rcPaint의 값입니다. 창 관리자 또는 프로그램에서 명시 적으로 호출하는 프로그램에 의해 InvalidateRect() 호출에 의해 만들어지는 더티 사각형이있는 한 WM_PAINT가 생성됩니다. EndPaint()는이를 지 웁니다.
감사합니다. EndPaint없이 CPU 사용률을 설명합니다. –
참. EndPaint는 기본적으로 ValidateRect를 호출합니다. DefWindowProc (rect의 유효성을 검사 함)로 연기하거나 직접 ValidateRect를 호출 할 수 있습니다. –
- 1. BeginPaint의 hWnd 매개 변수에 대한 올바른 값은 무엇입니까?
- 2. 차이점 downcase와 downcase의 차이점! Ruby에서
- 3. IE5와 IE8의 차이점 모드 차이점
- 4. 컴파일러 차이점
- 5. 차이점 포크
- 6. 정렬 차이점
- 7. 파일이없는 차이점
- 8. 네트워크의 차이점
- 9. RegEx의 차이점
- 10. 게으른 로딩 Javascript 파일과 차이점 사이의 차이점</body>
- 11. System.Web.Cache와 HTTPContext.Curent.Cache의 차이점
- 12. 입양과 입양의 차이점
- 13. Object와 NSObject의 차이점
- 14. 코코아에서 연산과 스레드의 차이점
- 15. Cmdlet.EndProcessing과 Cmdlet.StopProcessing의 차이점
- 16. HP LoadRunner와 PerformanceCenter의 차이점
- 17. Silverlight 2.0과 3.0의 차이점
- 18. SSRS 2005와 2008의 차이점
- 19. LINQ의 두 위치 차이점
- 20. DateTime.ToUniversalTime과 TimeZoneInfo.ConvertTimeToUtc의 차이점
- 21. 두 날짜의 차이점
- 22. DocumentFormat.OpenXml.Packaging.WordprocessingDocument에서 Open과 Create의 차이점
- 23. STREAM_CLIENT_CONNECT와 STREAM_CLIENT_ASYNC_CONNECT 사이의 차이점
- 24. Go와 Cython의 차이점
- 25. ArrayList 및 List와의 차이점
- 26. /usr/include와/include의 차이점
- 27. 스레드와 스레드 풀의 차이점
- 28. Zend_Controller_Action_Helper_Abstract와 Zend_View_Helper_Abstract의 차이점
- 29. Perl (Windows와 Linux의 차이점)
- 30. USER_INDEXES와 USER_IND_COLUMNS의 차이점
귀중한 의견을 보내 주셔서 감사합니다. BeginPaint 대신 WM_PAINT 내에서 GetDC를 사용하면 문제가 발생합니다. –
Hans Passant의 회신을 읽어보십시오. 이유에 대한 자세한 내용은 좋은 생각이 아닙니다. 새로운 비주얼 스튜디오 프로젝트를 만들 때 WM_PAINT 핸들러에 BeginPaint와 EndPaint가 이미 있습니다. 왜 GetDC를 사용하겠습니까? – Matt