프로그래밍/MFC

MFC 윈도우 객체, 윈도우 핸들 = 윈도우

에어버스 2016. 6. 20. 23:01

- 윈도우(Window)

OS에서 관리하는 일종의 데이터 구조체로서 일반적으로 화면에서 사각형 영역을 차지한다.
OS에서 메시지를 받을 수 있는 대상은 윈도우 뿐이다.

이 윈도우를 조작하기 위해서는 HWND 타입의 핸들이 필요하며, SDK 프로그램에서는 API를 호출할 때 윈도우 핸들을 넘겨주고 해당 윈도우를 조작한다. 프로그래머 입장에서는 윈도우 = 윈도우 핸들

- 윈도우 객체 (Window Object)

MFC의 CWnd(파생)클래스로 만든 C++ 객체

객체 내부에 m_hWnd 멤버 변수를 가지며 이 변수에 윈도우 핸들값을 저장한다.

<생명주기 (Lifetime)>

 

생성 

소멸 

 윈도우 

 ::CreateWindow() 

 ::DestroyWIndow() 

 윈도우 객체

 생성자 

 소멸자 

{
  CWnd MyWnd; // 윈도우 객체 생성
  MyWnd.Create(...); // 윈도우 생성
  MyWnd.ShowWindow(...);
  ...
} // 윈도우 객체 파괴, 윈도우 파괴 - 소멸자 코드에서 ::DestroyWindow() 호출되어 객체와 윈도우 파괴 됨

만약, 객체는 파괴되더라도 윈도우는 파괴되지 않도록 하려면 CWnd::Detach() 호출하면된다.

{
  CWnd MyWnd; // 윈도우 객체 생성
  MyWnd.Create(...); // 윈도우 생성
  MyWnd.ShowWindow(...);
  ...
  MyWnd.Detach(); // 윈도우와 윈도우 객체 분리
} // 윈도우 객체 파괴, 윈도우 파괴 안됨.

Detach() 반대로 Attach() 로 윈도우 핸들을 윈도우와 연결해준다.

구현 예>
BOOL CWnd::Attach(HWND hWNdNew)
{
  m_hWnd = hWndNew;
}

HWND CWnd::Detach()
{
  m_hWnd = NULL;
}