天天看點

關于CWnd::Attach( HWND hWndNew )摘錄;

// 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類裡了,就是這樣!