TN003: Windows의 매핑을 처리 하는 개체

이 노트에서는 MFC Windows 매핑 지원 루틴 개체 핸들을 c + + 개체。

문제

Windows 개체 처리s 일반적으로 표현 됩니다. MFC 클래스는 c + + 개체와 Windows 개체 핸들을 래핑합니다. MFC 클래스 라이브러리에 대 한 핸들 배치 기능 특정 핸들을 사용 하 여 Windows 개체를 래핑하는 c + + 개체를 찾을 수 있는 방법을 제공 합니다. 그러나 거기에 시간 때 Windows 개체가 없는 c + + 래퍼 개체를, 및 c + + 래퍼 역할을 임시 개체를 만든이 시간。

Windows 개체 핸들 맵을 사용 하는:

이러한 개체 중 하나에 대 한 핸들을 감안할 때, FromHandle정적 멤버 함수를 호출 하 여 핸들을 래핑하는 MFC 개체를 찾을 수 있습니다. 예를 들어, 주어진 HWND hWnd 를 호출:

CWnd::FromHandle(hWnd)

hWnd를 래핑하는 CWnd 에 대 한 포인터를 반환 됩니다. 텍스트에 특정 래퍼 개체가 있으면 해당 hWnd hWnd포장 임시 CWnd 생성 됩니다. 이 핸들에서 유효한 c + + 개체를 얻을 수 있습니다.

래퍼 개체를 일단 공용 멤버 변수를 통해 해당 핸들을 얻을 수 있습니다. CWnd는 경우 m_hWnd 포함 개체에 대 한 HWND。

핸들 MFC 개체에 연결

Windows 개체를 새로 만든된 핸들 래퍼 개체와 핸들을 감안할 때, Attach를 호출 하 여 두를 연결할 수 있습니다. 예를 들어:

CWnd myWnd;
myWnd.Attach(hWnd)

이것은 myWnd 및 hWnd연결 영구 지도에서 항목. CWnd::FromHandle(hWnd) 호출 포인터 myWnd에 반환 이제 것입니다. MyWnd 를 삭제 하면 소멸자가 Windows DestroyWindow 함수를 호출 하 여 Hwnd를 파괴 하는 자동으로 됩니다. 필요 하지 않은 경우에 (일반적으로 때 떠나 범위는 myWnd 에 정의 된) myWnd 개체가 소멸 되기 전에 hWnd 를 myWnd 에서 분리 해야 합니다. 이렇게 분리 멤버 함수。

myWnd.Detach()

임시 개체에 대 한 자세한

FromHandle 래퍼 개체 없는 핸들을 주어 집니다 때마다 임시 개체가 생성 됩니다. 이러한 임시 개체 자신의 핸들에서 분리 하 고 DeleteTempMap 함수에 의해 삭제 됩니다. CWinThread 에서 기본 OnIdle 처리는 자동으로 임시 핸들 지도 지 원하는 각 클래스에 대 한 DeleteTempMap 을 호출 합니다. 즉, 임시 개체에 대 한 포인터 있을 것입니다 과거 함수에서 출구 지점을 유효한 포인터를 가져온 Windows 메시지 루프가 유휴 시간 동안 임시 개체 삭제 됩니다 가정 수 없습니다.

래퍼 개체 및 다중 스레드

임시 및 영구 개체 당 스레드 단위로 유지 됩니다. 즉, 하나의 스레드가 다른 스레드의 임시 또는 영구 인지에 관계 없이 c + + 래퍼 개체를 액세스할 수 없습니다. 임시 개체는 임시 개체가 속하는 스레드 OnIdle 들어가면 삭제 됩니다 위에서 설명 했 듯이。

이러한 개체에서 한 스레드가 다른 전달할 항상 보내기 그들 그들의 네이티브 처리 로 입력 합니다. 예기치 않은 결과가 자주 발생 한 스레드에서 c + + 래퍼 개체를 전달。

기술 노트 번호로 |nbsp; 카테고리별 기술 노트(&N)

Index