1. 程式人生 > >MFC建立視窗(控制元件)總結

MFC建立視窗(控制元件)總結

        好久沒來CSDN發總結的文了~這段時間一直專案,是一個比較老的MFC框架下的專案。在已有的主程式框架下,使用OLE的方式,即ActiveX控制元件實現各項功能。我的任務是在已有的基於OLE的基類下派生的子類中實現平面快速繪圖及3D繪圖顯示的效果。可以說,任務看起來不是很難,主要是在老舊的框架下,多層派生中實現功能,總是讓人糾結~~~~~~~~~呃,扯遠了,今天先簡單講一下碰到的MFC問題,之後會系統總結一些OpenGL的原理及使用。

        首先總結一下MFC視窗型別,有3種最基本的視窗型別:重疊視窗、彈出視窗和子視窗。
重疊視窗(overlapped window),具有應用程式主視窗的全部特點。它的非客戶區包括一個可伸縮的框架、選單條、標題欄和最小化、最大化按鈕。
彈出視窗(popup window),具有訊息框或者對話方塊的全部特點。它的非客戶區包括一個固定大小的框架和一個標題欄。
子視窗(child window),具有類似按鈕控制元件的全部特點。它沒有非客戶區,視窗的處理過程負責繪製視窗的每個部分。


重疊視窗
  一個重疊視窗是頂層視窗有一個標題欄,邊框和客戶區,它的目的是作為一個應用程式的主視窗。它也可以有一個視窗選單,最小化和最大化按鈕和滾動條。重疊的視窗作為主視窗使用通常包括所有這些元件。
  通過CreateWindowEx函式中指定的WS_OVERLAPPED或WS_OVERLAPPEDWINDOW風格,一種應用程式建立一個重疊的視窗。如果使用WS_OVERLAPPED風格,視窗有一個標題欄和邊框。如果使用WS_OVERLAPPEDWINDOW風格,視窗有一個標題欄,邊框大小,視窗選單,最小化和最大化按鈕。


彈出視窗
  彈出視窗是頂級視窗,並連線到桌面視窗的子視窗的列表。應用程式通常使用對話方塊彈出視窗。彈出視窗不需要有標題,而重疊的視窗必須有標題。當一個彈出視窗沒有標題,它可以建立無邊框。彈出視窗可能擁有其他頂級視窗,或由其他頂級視窗所擁有,或者前面兩種情況同時存在。即使沒有指定,所有彈出視窗都具有WS_CLIPSIBLINGS風格。如果視窗位置或大小的引數使用了CW_USEDEFAULT,彈出視窗將不能被建立。使用了CW_USEDEFAULT引數的彈出視窗會存在,但位置或大小可能出現錯誤。重疊的視窗通常是保留給應用程式的主視窗,被稱為主視窗或框架視窗。 彈出視窗通常用於對話方塊和訊息框。
  一個彈出視窗,可以看作是一個特殊型別的重疊視窗——對話方塊,訊息框以及其他外部應用程式的主視窗中出現的臨時視窗。彈出視窗可以選擇標題欄,去掉這一點,彈出視窗跟重疊視窗的WS_OVERLAPPED風格相同。
    建立一個通過指定CreateWindowEx WS_POPUP風格的彈出視窗。要包含一個標題欄,指定WS_CAPTION樣式。使用WS_POPUPWINDOW風格建立一個彈出視窗,具有邊框和視窗選單。該WS_CAPTION樣式必須結合WS_POPUPWINDOW風格使視窗選單中可見。


子視窗
  子視窗必須有一個父視窗,並只限於父視窗的客戶區。這是子視窗跟重疊視窗和彈出視窗的主要區別。子視窗的父視窗可以是頂層視窗或其他子視窗。子視窗的位置,是從他們的父視窗的左上角開始計算,而不是從螢幕左上角。 
  應用程式可以為一個子視窗建立一個標題欄,視窗選單,最小化和最大化按鈕,邊框,滾動窗,但不能建立選單。如果應用程式指定一個選單控制代碼,或者使用它註冊子視窗類、建立子視窗的時候,選單控制代碼將被忽略。