Can you summarize the following document?
        
  這個概念是由(由 道格拉斯·恩格爾巴特 領導)開發實現的。 他們最早的系統支援多視窗,但沒明顯的方法顯示它們的分界線(比如視窗邊框、標題欄等)。  研究在 Xerox 公司的 Palo Alto 研究中心 / PARC (由 艾倫·凱領導)中繼續。他們使用了重疊的視窗。  在1980年代,PARC 提出術語"WIMP",分別代表了視窗、圖示、選單、指標。  那時Apple與PARC進行了簡單的合作。Apple 根據 PARC 的介面開發了自己的新介面。它首次應用是在 Apple的 Lisa上,此後用於 Macintosh 電腦。與此同時,Microsoft在為"Mac"開發辦公軟體。之後他們在 Apple 系統的基礎上開發了自己的視窗系統。

  視窗子類化是對一個視窗例項通過GetWindowLong和SetWindowLong將視窗過程地址修改為一個新函式地址,新的視窗過程函式處理那些感興趣的訊息,將其它訊息傳遞給原視窗過程。即例項子類化。在某控制元件已經建立的情況下,為了獲得視窗訊息,必須子類化它。子類化不需要建立一個完整的新視窗類,只需要攔截單個視窗。  視窗超類化是一個已存在的視窗類(WNDCLASS或WNDCLASSEX),改變視窗類的特徵。僅影響視窗類新建立的視窗例項,不會影響視窗過程地址修改前已經建立的視窗。超類化只能改變使用者自創的視窗的特性,不能用於系統建立的視窗(如對話方塊上的標準按鈕)。超類話過程示例如下:

  MFC的CWindowImplBaseT::SubclassWindow用於動態地把一個視窗例項繫結到當前的CWnd物件,訊息迴圈首先呼叫CWnd物件的視窗過程,傳遞給基類的訊息將被預設的視窗過程處理。CWnd::SubclassDlgItem用於把對話方塊的一個控制元件子類化繫結到一個基於CWnd的類物件。CWindowImplBaseT::UnsubclassWindow恢復一個被子類化的視窗。  模板類CWindowImplBaseT提供一個資料成員WNDPROC m_pfnSuperWindowProc並且初始化為 ::DefWindowProc.然而在視窗超類化處理時它儲存了已註冊視窗類的視窗過程,在視窗子類化時它儲存視窗例項控制代碼原有的視窗過程。  CWnd::CreateEx在建立視窗前呼叫SetWindowsHookEx函式安裝了一個鉤子函式_AfxCbtFilterHook。視窗剛建立好,鉤子函式_AfxCbtFilterHook就被呼叫。_AfxCbtFilterHook呼叫SetWindowLong將視窗過程替換為AfxWndProcBase,並將SetWindowLong返回的原視窗地址儲存到成員變數oldWndProc。可見,通過CWnd::CreateEx建立的所有視窗都會被子類化。在DefWindowProc函式中,訊息會傳給子類化時儲存的原視窗地址oldWndProc。  ATL提供DECLARE_WND_SUPERCLASS來支援超類化。

  使用Windows API函式CreateWindowEx,可以指定建立的視窗的型別:  GetParent函式,對於子視窗返回其父視窗控制代碼;對於彈出視窗,返回擁有者視窗控制代碼;對於層疊視窗,返回0.  GetWindow函式,指出GW_OWNER引數,則可以返回彈出視窗或層疊視窗的擁有者視窗控制代碼。  FindWindowEx函式,用於找到指定父視窗、指定子視窗的下一個子視窗。

  WNDCLASS中cbClsExtra和cbWndExtra,分別用於指定附加於視窗類與視窗例項的額外儲存空間位元組大小,不能超過40位元組。分別類似於C++類中的static變數與類似於C++類中的成員變數。  GetClassLong(hwnd,GCL_CBCLSEXTRA)獲取的是類附加空間的大小,即cbClsExtra的值。GetClassLong(hwnd,GCL_CBWNDEXTRA)獲取的是視窗附加空間的大小,即cbWndExtra的值。  使用方法:  其它相關Windows API有:GetWindowWord、GetWindowLongPtr、SetWindowWord、SetWindowLongPtr。

  視窗系統中管理視窗的部分被成為"視窗管理器"  常見的視窗系統:
視窗是在使用者介面上的一個可見的範圍。視窗一般都是長方形的。它包含著各種控制元件,是用作輸入和輸出的介面。雖然視窗一般用於圖形使用者介面,但又有時用於命令列介面的。而一個使用視窗為主要使用者介面的系統則稱為視窗系統。這個想法源於施樂帕洛阿爾託研究中心。