|
将一个窗体(子窗体)嵌入另一个窗体(父窗体),也就是相当于把一个窗体当成控件,放入另一个窗体中 现在用的比较多的方法是将子窗体的窗体属性中的border设为none,Style设为Child,在父窗体类中实现就行 - CPage *m_page = new CPage();
- m_page->Create(m_page::IDD,this);
- CRect re;
- GetDlgItem(IDC_PICTURE).GetWindowRect(&re);
- ScreenToClient(re);
- m_page->MoveWindow(re);
- m_page->ShowWindow(SW_SHOW);
这是比较普遍,而且简单的方法,但是有时候子窗体可能在别的地方还需要单独调用,而且是带边框的形式,这种就很头疼,总不能说建两个窗体吧。网上相关问题的帖子也挺多,但是都没有具体可靠的方法,最近解决了相关的问题,废话不多说
- CPage *m_page = new CPage();
- m_page->Create(m_page::IDD,this);
-
- m_page->SetParent(this);
- DWORD dw = ::GetWindowLong(m_page->m_hWnd,GWL_STYLE);
- dw = dw&~WS_POPUP;
- dw = dw&~WS_CAPTION;
- dw = dw&~WS_THICKFRAME;
- dw = dw|WS_CHILD;
- ::SetWindowLong(m_page->m_hWnd,GWL_STYLE,dw);
- dw = ::GetWindowLong(m_page->m_hWnd,GWL_EXSTYLE);
- dw = dw&~WS_EX_DLGMODALFRAME;
- ::SetWindowLong(m_page->m_hWnd,GWL_EXSTYLE,dw);
- CRect re;
- this->GetWindowRect(re);
- ScreenToClient(re);
-
- m_page->MoveWindow(0,0,re.Width()-20,re.Height()-40);
- m_page->ShowWindow(SW_SHOW);
好了,就这么多,方法挺简单的,只不过没有系统的介绍 |