Child윈도우를 Popup시키는 방법
1.요약 Child윈도를 POPUP시키는 방법을 소개하겠습니다. 이것은 Toolbar가 Main Frame에서 Docking되고 Floating되는 원리와 같습니다. 2.본문 단순히 WS_CHILD속성의 윈도를 WS_POPUP속성을 주면 되지 않는다는 건 아시죠. 생성될때 WS_CHILD속성이 정해지면 변경이 불가능합니다. 그러면 어떻게 POPUP시킬 것인가? 원리는 간단합니다. 새로운 POPUP 윈도를 하나만들고 POPUP시키고자하는 윈도의 부모를 새로 만든 POPUP 윈도로 바꿔버리는 됩니다. 3.예제 void MyWnd::PopupWindow(BOOL bPopup) { if (!bPopup) { // Docking if (m_pFloatSiteWnd) { m_wndChild.SetParent(this); delete m_pFloatWnd; m_pFloatSiteWnd = NULL; } } else { // Floating if (!m_pFloatSiteWnd) { CRect rc; m_wndChild.GetWindowRect(&rc); rc.bottom += ::GetSystemMetrics(SM_CYSMCAPTION); m_pFloatSiteWnd = new CWnd; m_pFloatSiteWnd->CreateEx(WS_EX_TOOLWINDOW, ::AfxRegisterWndClass(0, 0, (HBRUSH)COLOR_BTNFACE + 1), NULL, WS_POPUP | WS_CAPTION | WS_VISIBLE, rc, this, 0); m_wndChild.SetParent(m_pFloatSiteWnd); } } } |