這篇文章翻譯至MSDN2005,給自己學(xué)習(xí),也給所有覺得它有用的人,文中難免有翻譯不到位或者錯誤的地方,望高手指正。譯者:歐昊川(轉(zhuǎn)載麻煩注明出處及譯者)
2008年5月4日
這個概述討論了窗口的一些特性,如窗口類型、狀態(tài)、大小及位置。
1.1層疊窗口(OverlappedWindows)
層疊窗口是一個具有標(biāo)題欄、邊框和客戶區(qū)的頂層窗口;也就是說它適合做為應(yīng)用程序主窗口。它也可以具有一個系統(tǒng)菜單,最小和最大化按鈕,以及滾動條。一個層疊窗口被典型地用于包含所有上述組件的應(yīng)用程序主窗口。
通過在CreateWindowEx中指定WS_OVERLAPPED或者WS_OVERLAPPEDWINDOW樣式,一個應(yīng)用程序就能創(chuàng)建一個層疊窗口。假如你使用第一個樣式,那么創(chuàng)建的窗口就具有一個標(biāo)題欄和邊框;假如你使用第二個,那么窗口就具有一個標(biāo)題欄,可以調(diào)整大小的邊框,系統(tǒng)菜單,以及最大最小化按鈕。
1.2彈出窗口(Pop-upWindows)
彈出窗口是一個非凡的層疊窗口,它被用于顯示在應(yīng)用程序主窗口之外的對話框,消息框以及其他臨時窗口。標(biāo)題欄對彈出窗口來說是可選的;除此之外,彈出窗口跟具有WS_OVERLAPPED樣式的層疊窗口一樣。
你可以通過在CreateWindowEx中指定WS_POPUP樣式來創(chuàng)建一個彈出窗口。假如要使用標(biāo)題欄,就加入WS_CAPTION樣式。使用WS_POPUPWINDOW樣式來創(chuàng)建一個含有邊框和系統(tǒng)菜單的彈出窗口。WS_CAPTION樣式必須與WS_POPUPWINDOW樣式一起使用才能使系統(tǒng)菜單可見。
1.3子窗口(ChildWindows)
子窗口具有WS_CHILD樣式并且它被限制在其父窗口的客戶區(qū)中。應(yīng)用程序典型地使用子窗口來把其父窗口的客戶區(qū)劃分成幾個功能區(qū)域。你可以通過在CreateWindowEx中指定WS_CHILD樣式來創(chuàng)建子窗口。
子窗口必須具有一個父窗口。父窗口可以是一個層疊窗口,彈出窗口,或者另外一個子窗口。你可以在CreateWindowEx中指定父窗口。假如你在CreateWindowEx中指定了WS_CHILD樣式但是沒有指定父窗口,那么系統(tǒng)不會創(chuàng)建這個子窗口。
子窗口只具有一個客戶區(qū)而沒有其他特性,除非這些特性被明確的請求。應(yīng)用程序可以為子窗口添加標(biāo)題欄,系統(tǒng)菜單,最小化最大化按鈕,邊框,以及滾動條。但是子窗口不能具有自定義菜單。假如應(yīng)用程序指定了一個自定義菜單句柄,那么無論是在它注冊這個子窗口類還是創(chuàng)建這個子窗口時,這個菜單句柄都被忽略。假如沒有指定邊框樣式,系統(tǒng)將創(chuàng)建一個無邊框窗口。應(yīng)用程序可以使用無邊框的子窗口來劃分父窗口的客戶區(qū)假如想保持這種劃分對用戶是不可見的話。
1.4窗口布置(Positioning)
系統(tǒng)總是相對于父窗口客戶區(qū)的左上角來放置子窗口。子窗口的任何部分都不會出現(xiàn)在其父窗口的邊框之外。假如應(yīng)用程序創(chuàng)建一個比父窗口大的子窗口,或者移動子窗口使得一個或者所有子窗口超出了父窗口的邊框,那么系統(tǒng)會裁剪子窗口,即在父窗口邊框之外的部分不被顯示。對父窗口產(chǎn)生影響的行為同樣會影響子窗口,這些行為如下: