在執行時建立、位置顯示和隱藏控制元件使用展示視窗
介紹 在本教程中,我將演示一種在開發應用程式(比如圖形應用程式)時非常有用的方法。 眾所周知,應用程式會有很多控制元件供使用者互動,以便在他們正在製作的主題上獲得預期的結果。 例如,這些控制元件可以是改變顏色的旋轉器、改變文字字串的編輯框、處理某些內容的按鈕等等。 為什麼? 有時,最好將可以分組的控制元件放在一個單獨的位置,以便使用者在需要時可以將它們放在附近。 舉一個非常簡單的例子,我想談談文字。因此,很多時候,我們需要更改檢視中顯示的文字的字串、顏色和背景顏色。這也是附帶的演示專案所演示的主題。 如何? 開始步驟:使用Create(…)或CreateEx(…)函式建立控制元件。 在執行時建立控制元件是MFC開發中最簡單、最有趣的部分。我們用來在執行時建立任何Windows控制元件的最常用的函式是create(…)函式,除非我們想要更多的擴充套件樣式,那麼我們可以使用CreateEx(…)函式。 這些函式採用不同的引數,這取決於所討論的控制元件、使用的樣式以及該控制元件是否會出現在螢幕上。 例如,下面兩個程式碼片段將使用我們在執行時傳遞給每個函式的引數設定的樣式建立一個編輯框控制元件。請注意,建立的編輯控制元件不會出現在螢幕上,因為我們沒有使用WS_VISIBLE樣式位。我們這樣做是為了能夠演示本文的顯示和隱藏特性。: -) 例1。Create(…)函式 如果m_wndEditBox是一個CEdit類的物件,這將建立一個編輯框,有平的和單一的黑線邊框效果,像這樣:複製Code
m_wndEditBox.Create(ES_AUTOHSCROLL | // Show scroll bars automatically. ES_MULTILINE | // Multiline text support. ES_LEFT | // Left aligned text in control. ES_NOHIDESEL | // Always show the selection. WS_CHILD | // This is child window. WS_HSCROLL | // Has Horizontal scrollbars. WS_VSCROLL, // Has Vertical scrollbars. WS_BORDER | // Single flat black line border. edtRect, // The rectangle area for position and size. this, // How is the Parent Window? ID_EDIT); // The resource ID defintion.
同一個編輯框的螢幕截圖建立沒有3D外觀,一個平面外觀。 例2。CreateEx(…)函式 而這個是與CreateEx(…)一起使用的,它在控制元件周圍產生3D邊框效果:複製Code
m_edtEdit.CreateEx(WS_EX_CLIENTEDGE, // Make a 3D-border _T("EDIT"), // This is very IMPORTANT!, or it won't appear 3D! NULL, ES_AUTOHSCROLL | ES_MULTILINE | ES_LEFT | ES_NOHIDESEL | WS_CHILD | WS_HSCROLL | WS_VSCROLL, edtRect, // The rectangle area for position and size. this, ID_EDIT);
效果很好,不是嗎? 上面用3D外觀建立的編輯框的螢幕截圖。 這兩個函式的原型如下:複製Code
BOOL Create(DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID); BOOL CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID, LPVOID lpParam = NULL);
下一步:調整控制元件的大小和位置。 如果rcClickMe是一個CRect類的物件而m_btnClickMe是一個CButton類的物件,那麼通過使用SetRect(…),我們可以設定任何控制元件的位置和大小,如下所示,使用程式碼和螢幕截圖:複製Code
CRect rcClickMe; // The CRect object for this control's rectangle area SetRect(&rcClickMe, 50,290,220,310); // This function actually sets the area // This is the Create(...) function that actually creates the control but // without using the WS_VISIBLE style as expalined above. m_btnClickMe.Create("Click Me!", // The caption of the button. WS_CHILD | // A child window. BS_PUSHBUTTON, // A push button style. rcClickMe, // The position and size rectangle. this, // The parent window. ID_CLICKME); // The resource ID.
上面的按鈕截圖,標題為“點選我!”,顯示了它的大小和位置。 注意演示應用程式在展開時的樣子,所有控制元件都可以通過SW_SHOW巨集看到。 演示應用程式崩潰時的螢幕截圖。 請注意,當我們第一次建立時,所有的控制元件都是通過不使用WS_VISIBLE來隱藏的,然後使用SW_HIDE巨集來隱藏它們。 最後一步:使用ShowWindow(…)和UpdateWindow(…)函式來顯示和隱藏已建立的和定位的控制元件。 重要提示:在第一次建立控制元件時,我們不能將WS_VISIBLE包含在控制元件的樣式中!隱藏,複製Code
// This code will SHOW the edit control m_edtEdit.ShowWindow(SW_SHOW); UpdateWindow(); // This code will HIDE the edit control m_edtEdit.ShowWindow(SW_HIDE); UpdateWindow();
關於演示應用: 功能及其作用: OnPushButtonClicked()——這個函式是總統,負責展開和顯示控制元件,或者在所謂的RollOut視窗中摺疊和隱藏控制元件。 ShowChildren(BOOL bShow)——這個是實際的邊界警察,負責實際顯示和隱藏RollOut視窗的子視窗。它接受一個布林值來決定使用者是顯示還是隱藏子元素。 OnCreate (LPCREATESTRUCT lpcs)-這是WM_CREATE處理程式,已經與MFC一起。這是我們必須建立所需控制元件的地方。 特點: 您可以單擊Expander/Collapser按鈕來切換子視窗和視窗大小和可見性。 您可以更改編輯框內的文字,以檢視靜態更改內的文字。 你可以點選點選我!按鈕,以檢視效果。觀察編輯框和靜態文字的變化。 單擊任何單選按鈕,可以檢視靜態文字顏色的變化。 單擊複選框將靜態返回顏色切換為黃色或灰色。 這就是朋友。祝你玩得愉快,繼續學習你能學到的東西!: -) 歡迎提出任何問題、意見和建議。在這裡或我的電子郵件,如你所願。 本文轉載於:http://www.diyabc.com/frontweb/news5355.html