`
isiqi
  • 浏览: 16487580 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

MFC控件篇之对话框的应用

阅读更多
我认为初学者使用以对话框为基础的应用是一个比较好的选择,因为这样一来可以摆脱一些开发界面的麻烦,此外也可以利用ClassWizard自动的添加消息映射。

在VC中提供了生成“以对话框为基础的应用”的功能,你所需要选择的是在使用AppWizard的第一步选择“对话框为基础的应用”,VC会生成包含有应用派生类和对话框派生类的代码。在应用类的InitInstance()成员函数中可以看到如下的代码:

BOOL CMy58_s1App::InitInstance()
{
CMy58_s1Dlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
//dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
//dismissed with Cancel
}

return FALSE;
}

这是产生一个有模式对话框并创建它,在对话框返回后通过返回FALSE来直接退出。在设计时通过编辑对话框资源你可以设计好界面,然后通过ClassWizard映射消息来处理客户的输入,由于前几节已经讲过本节也就不再重复。

同样基于对话框的应用也同样可以使用属性对话框做为界面,或者是通过使用经过派生的通用对话框作为界面。

提示:当你使用有模式对话框时最开始是无法隐藏窗口的,而只能在对话框显示后再隐藏窗口,所以这会造成屏幕的闪烁。一个解决办法就是采用无模式的对话框,无模式的对话框在创建后是隐藏的,直到你调用ShowWindow(SW_SHOW)才会显示。相关代码如下:

BOOL CMy58_s1App::InitInstance()
{
//必须新生成一个对象,而不能使用局部变量
CMy58_s1Dlg* pdlg=new CMy58_s1Dlg;
m_pMainWnd = pdlg;
pdlg->Create();
return TRUE;
}

使用对话框作为子窗口

使用对话框作为子窗口是一种很常用的技术,这样可以使界面设计简化而且修改起来更加容易。

简单的说这种技术的关键就在于创建一个无模式的对话框,并在编辑对话框资源时指明Child风格和无边框风格,接下来利用产生一个CDialog的派生类,并进行相关的消息映射。在创建子窗口时需要利用下面的代码:

int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

//创建子窗口
m_dlgChild.Create(IDD_CHILD_DLG,this);
//重新定位
m_dlgChild.MoveWindow(0,0,400,200);
//显示窗口
m_dlgChild.ShowWindow(SW_SHOW);
return 0;
}

此外还有一中类似的技术是利用CFormView派生类作为子窗口,在编辑对话框资源时也需要指明Child风格和无边框风格。然后利用ClassWizard产生以CFormView为基类的派生类,但是由于该类的成员函数都是受保护的,所以需要对产生的头文件进行如下修改:
class CTestForm : public CFormView
{
//将构造函数和构析函数改为共有函数
public:
CTestForm();
virtual ~CTestForm();
DECLARE_DYNCREATE(CTestForm)
...
}

有关创建子窗口的代码如下:
int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

//对于CFormView派生类必须新生成对象而不能使用成员对象
m_pformChild = new CTestForm;
//由于CFormView的成员受保护,所以必须对指针进行强制转换
CWnd* pWnd=m_pformChild;
pWnd->Create(NULL,NULL,WS_CHILD|WS_VISIBLE,CRect(0,210,400,400)
,this,1001,NULL);
return 0;
}

最后你会看到的窗口界面,上方的对话框子窗口和下方的FormView子窗口都可以通过资源编辑器预先编辑好。

提示:对于CFormView派生类必须新生成对象而不能使用成员对象,因为在CView的OnDestroy()中会有如下代码:delete this;所以使用成员对象的结果会造成对象的二次删除而引发异常。
分享到:
评论

相关推荐

    使控件与对话框同步大小变化

    6. **使用锚点和约束**:现代的MFC或WPF应用程序可能使用更高级的布局系统,如Windows Presentation Foundation (WPF)的Grid或Canvas,它们支持使用锚点和约束来定义控件相对于对话框或其他控件的位置和大小。...

    MFC控件与对话框

    MFC控件与对话框,教你编写MFC中基于对话框的应用程序

    MFC做的基于对话框的密码登录

    MFC中的对话框是应用程序与用户交互的重要方式,通常以模态或非模态的形式出现。模态对话框在用户关闭之前阻止了其他操作,而非模态对话框允许用户在与对话框交互的同时进行其他操作。在这个项目中,我们使用的应该...

    mfc 采用基于对话框的应用程序类型设计

    在本篇文章中,我们将深入探讨基于对话框的应用程序设计,特别是模态和非模态对话框的实现及差异。 首先,模态对话框(Modal Dialog)是一种阻止用户与应用程序其他部分交互,直到用户关闭该对话框为止的窗口。在...

    实现MFC对话框应用 基础控件

    在本文中,我们将深入探讨如何使用Microsoft ...总之,MFC对话框应用通过集成的基本控件,可以实现丰富的用户界面和交互功能。理解并熟练运用这些控件及其事件处理机制,是开发高效、用户友好的Windows应用程序的关键。

    MFC实现多个对话框

    在Microsoft Foundation Classes (MFC)库中,开发多对话框应用程序是常见的需求,尤其是在创建复杂的用户界面时。MFC提供了一种结构化的方式来管理和显示多个对话框,使得开发者可以更高效地构建这样的应用。本篇将...

    MFC添加对话框滚动条功能

    1. 在MFC应用程序中,打开“资源视图”,找到对话框资源,右键选择“插入控件”。 2. 在控件列表中找到“滚动条”(SCROLLBAR),并将其拖放到对话框上。确保为滚动条设置正确的ID(例如IDC_SCROLLBAR1)。 3. 在...

    MFC设置位图为对话框背景

    本篇文章将深入探讨如何在MFC对话框中设置位图作为背景,以及这一操作可能涉及的相关技术。 首先,我们需要了解对话框的基本概念。对话框是Windows应用程序中一种用于与用户交互的窗口,通常包含各种控件,如按钮、...

    MFC实现嵌入式对话框,显示子对话框到主对话框中的对应位置

    本主题将深入探讨如何在MFC应用中实现嵌入式对话框,并将其显示在主对话框的指定位置。这在创建复杂的用户界面时非常有用,因为它允许用户在同一个对话框内进行多个操作,提高用户体验。 首先,理解嵌入式对话框的...

    用VC++MFC做的基于对话框的时钟程序

    【VC++ MFC时钟程序】是利用Microsoft的Visual C++开发环境和MFC(Microsoft Foundation Classes)库创建的一个基于对话框的应用程序。MFC是一个C++类库,它为Windows应用程序开发提供了一种结构化的框架,使得...

    MFC中全屏显示对话框

    本篇将详细探讨如何实现MFC中的全屏对话框,并通过提供的源代码进行深入理解。 首先,我们来了解MFC对话框的基本概念。MFC中的对话框(CDialog类)是基于Windows API的对话框窗口的抽象,用于与用户交互。对话框...

    MFC模态 非模态对话框 ARX2008+VS2005

    在MFC中,对话框数据的获取和设置通常通过`DoDataExchange()`函数完成,该函数负责在对话框控件与成员变量之间交换数据。数据验证可以在`OnInitDialog()`中或自定义的验证函数中进行,以确保用户输入的有效性。 6. ...

    MFC.rar_MFC 对话框_MFC 对话框 交互_对话框

    MFC对话框是MFC库中的关键组件,用于实现用户与应用程序之间的交互。对话框通常包含一组控件,如文本框、按钮、复选框等,用户通过这些控件输入信息或执行特定操作。 对话框在MFC中分为两种类型:模态对话框(Modal...

    基于MFC的对话框控件的应用程序

    首先,我们从“基于MFC的对话框应用程序”开始。对话框在Windows应用程序中是一种用户界面元素,它通常用来显示信息或收集用户输入。在MFC中,我们可以使用CDialog类作为基础来创建自定义的对话框。创建一个新的MFC...

    MFC控件随对话框尺度变化

    在Windows应用程序开发中,Microsoft Foundation Class (MFC) 库为开发者提供了丰富的功能,包括创建用户界面、处理消息以及管理窗口和控件等。本文将深入探讨如何在MFC环境中实现对话框及其控件随对话框尺度变化的...

    MFC对话框分割条拖动控件

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中实现对话框分割条拖动控件,使得用户可以水平或垂直地调整对话框内的区域大小。这个功能广泛应用于各种应用程序,以提供用户自定义界面...

    MFC树形控件子对话框

    总之,MFC树形控件和子对话框是构建Windows应用界面的重要工具。通过学习和熟练掌握这两者的使用,开发者可以创建出直观、易用的用户界面,提升用户体验。同时,了解并运用MFC提供的各种功能和扩展,能够使你的应用...

    在ObjectARX中使用MFC-标签式对话框 项目源代码

    5. 对话框数据交换:利用MFC的DDX(Dialog Data Exchange)和DDV(Dialog Data Validation)机制,可以方便地在对话框控件和类成员变量之间交换数据,确保用户输入的合法性。 6. 实现命令:如果你的应用需要响应...

    在VS2013上的MFC树控件操作(连接对话框)

    对话框(Dialog)是MFC应用程序中用于与用户交互的窗口,通常包含各种控件,如按钮、文本框和树控件等。本教程将重点讲解如何在对话框中操作MFC树控件,并解决子节点字符串重复时添加不同对话框的问题。 1. **MFC树...

    MFC 一般属性页对话框

    **MFC 一般属性页...总的来说,MFC属性页对话框是Windows应用开发中的一个重要组件,它简化了复杂的设置管理,提高了用户交互的友好性。通过学习和实践,开发者可以掌握这一技能,提升其在GUI编程领域的专业能力。

Global site tag (gtag.js) - Google Analytics