在运行时创建、位置显示和隐藏控件使用展示窗口
介绍 在本教程中,我将演示一种在开发应用程序(比如图形应用程序)时非常有用的方法。 众所周知,应用程序会有很多控件供用户交互,以便在他们正在制作的主题上获得预期的结果。 例如,这些控件可以是改变颜色的旋转器、改变文本字符串的编辑框、处理某些内容的按钮等等。 为什么? 有时,最好将可以分组的控件放在一个单独的位置,以便用户在需要时可以将它们放在附近。 举一个非常简单的例子,我想谈谈文本。因此,很多时候,我们需要更改视图中显示的文本的字符串、颜色和背景颜色。这也是附带的演示项目所演示的主题。 如何? 开始步骤:使用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