2012-04-29 2 views
2

QPainter 기능을 사용하고 싶은 외부 라이브러리의 Windows HDC 핸들이 있습니다. Qt에서 QPaintDevice를 HDC 핸들로 생성하는 방법이 있습니까? 이 일을HDC 핸들에서 QPaintDevice 만들기

+1

지금까지 볼 수있는 한 불가능합니다. QPaintDevice에서 상속받은 QWidget에는 HDC 개념이 있습니다. QWidget :: getDC()를 통해 HDC를 가져올 수 있지만 설정할 수는 없습니다. 내부적으로 QWidgetPrivate :: dc에 저장됩니다. QWidget의 Pimpl 클래스에서 완전히 액세스 할 수 없습니다. – dagur

답변

0

한 가지 방법 : 윈도우 API를 사용하여

는 HDC에서 HWND를 얻을.

HWND handle = WindowFromDC(hdc); 
assert(handle != NULL); 

그런 다음 QWidget의 하위 클래스를 만들어 보호 된 구성원 변환에 액세스하십시오. 이를 사용하여이 솔루션에 설명 된대로이 멤버를 사용하여 QWidget을 만듭니다 (How to create a qwidget with a hwnd as parent). 이 예제에서는 QWidgetWrapper의 하위 클래스를 호출했습니다.

QWidgetWrapper *w = new QWidgetWrapper(); 
w->create((Wld)main_window); 

Wld는 "플랫폼 종속 창 식별자"에 대한 Qt의 typedef입니다.

+0

왜 HDC와 관련된 HWND가 있다고 생각합니까? [ "memory DC"] (http://www.codeproject.com/Articles/224754/Guide-to-Win32-Memory-DC)에 대해 들어 보셨습니까? HDC가 있지만 창은 없습니다. – SigTerm

+0

당신 말이 맞아요, 따라서 주장합니다. 이것은 메모리 DC가 아니라고 가정 할 수있을 때만 작동합니다. 그것은 나쁜 해결책이지만, 내가 생각해 낸 유일한 해결책입니다. – dagur