学习创建模态对话框和非模态对话框的笔记以及扩展对话框到副屏(电脑扩展模式下)

    在我一开始接触到MFC的时候就是从计算器开始学习的,在我寻找资料的过程中看到了https://blog.csdn.net/wang18323834864/article/details/78621633这个博客,在我后来需要新建对话框的时候使用了里面的方面解决了我的问题。

        模态对话框的非模态对话框可以互换,其步骤基本相同,不同的是消息响应函数内所用的函数不同。

        当模态对话框它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。

       非模态对话框则是在它弹出后,本程序其他窗口仍能响应用户输入。

      1.模态对话框的创建

        我需要的功能是按下一个按钮然后弹出对话框,那么就需要增加一个按钮并双击去到消息响应函数;然后需要在资源视图右键Dialog插入dialog,新建一个对话框,按需要是否删除新建对话框里面的按钮,然后需要对这个对话框创建对话框类,右键这个对话框选择增加类,直接修改类名就可以了(记得在响应的.h文件中包含头文件);

        之后需要在按钮消息响应函数里面创建变量并显示对话框了:

            DLG dlg;

    dlg.DoModal();

我的对话框的类名是DLG,所以创建DLG类的变量dlg,再使用DoModal()函数来显示对话框就可以实现该功能,如果需要增加一些判断条件等其它功能,需要对DoModal()函数的返回值进行操作(可参考上述链接)。DoModal()函数可以用来显示一个模态对话框。此成员函数用来显示一个模态对话框。其返回值对应于用来关闭对话框的控件的ID。此函数返回后,Windows响应这个对话框,所有的属性页都会被销毁。

扫描二维码关注公众号,回复: 2151945 查看本文章

函数原型为:virtual int DoModal(),返回值:如果函数成功则返回IDOK或IDCANCEL;否则返回0或-1

     2.非模态对话框的创建

        非模态对话框的创建步骤与模态对话框相似,都需要创建对话框和对话框类,按照链接中的步骤我们需要在主对话框的.h文件中包含子对话框头文件#include "DLG.h",并在里面定义一个对话框类的指针变量DLG  *m_pTipDlg,然后在主对话框类CTestStaticLibDlg的构造函数中初始化成员变量m_pTipDlg。如果cpp文件中函数太多,我们可以在Class View上半个视图中找到CAdditionDlg类,再在下半个视图中找到其构造函数双击,中间客户区域即可马上切到构造函数的实现处。在构造函数体中添加m_pTipDlg = NULL;如:

CTestStaticLibDlg::CTestStaticLibDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestStaticLibDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestStaticLibDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	m_pTipDlg = NULL;
}

最后在消息响应函数里面添加如下代码:

void CTestStaticLibDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//由句柄得到对话框的对象指针
   //pWnd->xxx( );   //调用C***Dialog中的函数xxx();

	
    if (NULL == m_pTipDlg)   
    {   
        // 创建非模态对话框实例   
        m_pTipDlg = new DLG();   
        m_pTipDlg->Create(IDD_DIALOG1, this);   
    }   
    // 显示非模态对话框   
    m_pTipDlg->ShowWindow(SW_SHOW); 
}
此时就可以实现非模态对话框的创建显示,其中的if语句可以省略,Create是一个可从CFrameWnd继承而来的成员函数,用于窗口的创建和设置,Create是MFC中的一个构造函数,用于生成在屏幕上可见的窗口。
ShowWindow()该函数设置指定窗口的显示状态,通过里面的参数指定要显示串口的显示状态

    3.然后我需要把这个非模态对话框在电脑的扩展模式下扩展到副屏显示,其实这个副屏就是给客户使用的,而业务员只要看电脑屏幕就可以,在查阅资料后发现可以使用MoveWindow()这个函数来实现,在我使用这个函数的时候一开始老是把主对话框扩展到副屏上,之后才使用子对话框类DLG声明的指针变量来实现子对话框的扩展:

m_pTipDlg->MoveWindow(rect[2].left, rect[2].top, rect[2].right, rect[2].bottom, true);//扩展子对话框

猜你喜欢

转载自blog.csdn.net/wqq995/article/details/80991766