模态对话框domodal的用法(vs2008)与非模态对话框

yizhihongxing

以下是“模态对话框DoModal的用法(vs2008)与非模态对话框的完整攻略”的标准markdown格式文本,其中包含两个示例:

模态对话框DoModal的用法(vs2008)与非模态对话框的完整攻略

在MFC中,对话框是一种常用的窗口类型,用于与用户交互。MFC提供了两种对话框类型:模态对话框和非模态对话框。以下是它们的详细讲解,包括DoModal的用法、非模态对话框的实现和两个示例说明。

1. DoModal的用法

DoModal是MFC中CDialog类的一个成员函数,用于显示模态对话框。它的用法如下:

INT_PTR DoModal();

DoModal函数会阻塞当前线程,直到对话框关闭为止。它返回一个INT_PTR类型的值,表示对话框的返回值。

以下是一个简单的示例:

CMyDialog dlg;
_PTR nRet = dlg.DoModal();
if (nRet == IDOK)
{
    // 用户单击了“确定”按钮
}
else if (nRet == IDCANCEL)
{
    // 用户单击了“取消”按钮
}

在上述示例中,我们创建了一个CMyDialog类的实例,并调用了它的DoModal函数来显示对话框。如果用户单击“确定”按钮,DoModal函数返回IDOK;如果用户单击了“取消”按钮,DoModal函数返回IDCANCEL。

2. 非模态对话框的实现

除了模态对话框,MFC还支持非模态对话框。非模对话框不会阻塞当前线程,可以与其他窗口同时交互。以下是实现非模态对话框的步骤:

  1. 创建话框类

首先,我们需要创建一个对话框类,继承自CDialog类。例如:

class CMyDialog : public CDialog
{
public:
    CMyDialog(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~CMyDialog();

    // 对话框数据
    enum { IDD = IDD_MYDIALOG };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    DECLARE_MESSAGE_MAP()
};

在上述示例中,我们创建了一个CMyDialog类,它继承自Dialog类,并声明了一个对话框模板ID为IDD_MYDIALOG。

  1. 创建对话框实例

接下来,我们需要创建一个CMyDialog类的实例,并调用它的Create函数来创建对话框。例如:

CDialog* pDlg = new CMyDialog();
pDlg->Create(IDD_MYDIALOG, pParentWnd);
pDlg->ShowWindow(SW_SHOW);

在上述示例中,我们创建了一个CMyDialog类的实例,并调用它的Create函数来创建对话框。Create函数的第一个参数是对话框模板ID,第二个参数是父窗口指针。最后,我们调用ShowWindow函数来显示对话框。

3. 示例1:模态对话框

以下是一个模态对话框的示例:

class CMyDialog : public CDialog
{
public:
 CMyDialog(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~CMyDialog();

    // 对话框数据
    enum { IDD = IDD_MYDIALOG };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    DECLARE_MESSAGE_MAP()
};

CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
    : CDialog(CMyDialog::IDD, pParent)
{
}

CMyDialog::~CMyDialog()
{
}

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
END_MESSAGE_MAP()

void CMyApp::OnButtonClicked()
{
    CMyDialog dlg;
    INT_PTR nRet = dlg.DoModal();
    if (nRet == IDOK)
    {
        // 用户单击了“确定”按钮
    }
    else if (nRet == IDCANCEL)
    {
        // 用户单击了“取消”按钮
    }
}

在上述示例中,我们创建了一个CMyDialog类,并在按钮单击事件中调用了它的Modal函数来显示对话框。

4. 示例2:非模态对话框

以下是一个非模态对话框的示例:

class CMyDialog : public CDialog
{
public:
    CMyDialog(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~CMyDialog();

    // 对话框数据
    enum { IDD = IDD_MYDIALOG };

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

    DECLARE_MESSAGE_MAP()
};

CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
    : CDialog(CMyDialog::IDD, pParent)
{
}

CMyDialog::~CMyDialog()
{
}

void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
END_MESSAGE_MAP()

void CMyApp::OnButtonClicked()
{
    CMyDialog* pDlg = new CMyDialog();
    pDlg->Create(IDD_MYDIALOG, this);
    pDlg->ShowWindow(SW_SHOW);
}

在上述示例中,我们创建了一个CMyDialog类,并在按钮击事件中创建了它的实例,并调用了它的Create函数和ShowWindow函数来显示对话框。

5. 总结

以上是“模态对话框DoModal的用法(vs2008)与非模态对话框的完整攻略”,包括DoModal的法、非模态对话框的实现和两个示例说明。我们可以根据具体需求来选择使用模态对话框或非模对话框,以实现特定的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:模态对话框domodal的用法(vs2008)与非模态对话框 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日

相关文章

  • ansible删除目录下所有内容的方法

    下面是详细讲解 “ansible删除目录下所有内容的方法”的完整攻略: 1. 使用file模块 Ansible中的file模块可以用于管理文件与目录,其中有一个子模块叫做“recurse”,可以用于递归删除目录下的所有文件。 示例1 – name: 删除目录下所有文件 file: path: /data/www/example.com/ state: abs…

    other 2023年6月26日
    00
  • mapwingis介绍

    以下是“MapWinGIS介绍的完整攻略”的标准markdown格式文本,其中包含了两个示例说明: MapWinGIS介绍 MapWinGIS是一个开源的GIS件,可以用于在Windows平台上开发GIS应用程序。本文将介绍MapWinGIS的基本概念和使用方法,包括如添加图层、如何进行地图操作等。 1. 添加图层 在MapWinGIS中,可以通过添加图层来…

    other 2023年5月10日
    00
  • ntrun怎么使用?nTrun快速启动工具使用技巧分享

    ntrun怎么使用? 1. ntrun是什么? ntrun是一款快速启动工具,可以帮助用户快速启动Windows系统中的各种程序和命令。使用ntrun可以提高用户的工作效率,特别是经常需要使用命令行工具的用户。 2. 如何使用ntrun? 2.1 下载并安装ntrun ntrun可以在官方网站上下载。下载完成后,按照提示进行安装即可。 2.2 启动ntrun…

    other 2023年6月27日
    00
  • 解决Spring AOP拦截抽象类(父类)中方法失效问题

    要解决Spring AOP拦截抽象类(父类)中方法失效问题,我们需要在拦截器中使用一个aspectj工具方法来处理。下面是具体的攻略: 1. 继承AbstractAutoProxyCreator类 在Spring中,我们通常使用AbstractAutoProxyCreator类作为自动代理创建器,所以我们需要继承它。重写其中的postProcessAfter…

    other 2023年6月27日
    00
  • 文件编译时出现multiple definition of ‘xxxxxx’的具体解决方法

    当编译文件时出现“multiple definition of ‘xxxxxx’”错误,通常意味着该符号已经在程序的另一个文件中定义过。解决这个错误的方法有很多种,以下是一些常用方法的介绍。 方法1:使用static关键字 当一个变量或函数被定义成static时,它的作用域被限制在当前文件中,不会被其他文件访问。因此,可以通过将变量或函数定义为static来…

    other 2023年6月27日
    00
  • github for windows 桌面版使用方法

    Github for Windows 桌面版使用方法 Github 是一个全球最大的开源社区,旗下有大量的开源项目,如何使用 Github 轻松管理你的代码呢?Github for Windows 就是 Github 官方提供的桌面版应用程序。本文为大家介绍 Github for Windows 的使用方法,帮助您快速上手。 下载安装 在 Github fo…

    其他 2023年3月28日
    00
  • Android自定义View圆形百分比控件(一)

    Android自定义View圆形百分比控件(一)攻略 简介 在本攻略中,我们将学习如何创建一个自定义的圆形百分比控件,用于显示一个圆形进度条,并根据百分比值进行动态更新。 步骤 步骤一:创建自定义View类 首先,我们需要创建一个自定义的View类,用于绘制圆形进度条。以下是一个示例代码: public class CircleProgressBar ext…

    other 2023年9月6日
    00
  • antdresetfields怎么用

    antdresetfields怎么用 Ant Design是一款基于React的UI组件库,由阿里巴巴的蚂蚁金服负责开发。antd中提供了一些方便的工具函数,比如resetFields函数,可以用于清空Antd表单中的所有数据。 resetFields用法 resetFields函数需要在表单组件实例上进行调用,用法如下: class MyForm exte…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部