MFC 윈도우 객체, 윈도우 핸들 = 윈도우
- 윈도우(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;
}