// Using Attach and Detach to map to the MDI client window
class CMainFrame : public CMDIFrameWnd
{
...
public:
CWnd m_wndMDIClient;
}
CMainFrame::~CMainFrame()
{
// detach MDI client window
m_wndMDIClient.Detach();
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// attach MDI client window
if (m_wndMDIClient.Attach(m_hWndMDIClient) == 0)
{
TRACE0("Failed to attach MDIClient./n");
return -1; // fail to create
}
}
///
CWnd是一個視窗對象,普通情況下是生成執行個體後用Create創健去一個視窗執行個體,但也可以将這個視窗對象綁定到一個已經生成的視窗執行個體上,也就是用Attach,綁定之後你便可以用這個CWnd對象的成員函數和成員變量很友善的操縱"一個已經生成的視窗執行個體"
1.not use CWnd
Fun(HWND hwnd)
{
MoveWindow(hwnd,0,0,100,100,true);
}
2.use CWnd
Fun (HWND hwnd)
{
CWnd Wnd;
Wnd.Attach(hwnd);
Wnd.MoveWindow(0,0,100,100,true);
Wnd.Detach();
}
///
window使用句柄來把持資源,窗體是一種資源,CWnd是這種資源的MFC的包裝類,在Win32API中,
HWnd是LONG型的,可以通過CWnd的ATTECH把一個HWND資源就附加到一個CWnd類裡了,就是這樣!