非模态对话框

新建一个SDI的MFC工程,

插入一个对话框资源IDD_DIALOG1,并为该对话框新建一个类CTestDlg.

增加一个菜单项,去掉POP-UP复选框,设置其ID为IDM_DIALOG,名称为对话框。为该菜单项建立命令消息响应。响应函数为OnDialog,在View中实现。

 

在OnDialog中添加代码:

	CTestDlg dlg;
	dlg.Create(IDD_DIALOG1,this);
	dlg.ShowWindow(SW_SHOW);


并在其所在的源文件中包含头文件#include 'TestDlg.h'

 

编译并运行该程序,点击"对话框"菜单项,可以看到对话框出现后马上消失(并不是有些人说的看不见)。

这说明了什么?

 

当我们运行程序,窗口显示时,窗口处在等待消息到来的过程中,每当窗口从消息队列中取走一条消息时,操作系统就调用我们为该消息编写的响应函数,执行完该函数后,又回到等待消息到来这一状态中。并不是停留在响应函数之中。

 

所以在本例中,我们点击“对话框”菜单项后,程序进入OnDialog中创建并显示对话框之后,OnDialog函数立即结束返回,于是在该函数中创建的局部对象dlg也立即释放。而我们希望显示的对话框是跟该对象关联的,对象消失了,对话框自然也消失了。

 

注意:只有与资源相关联的类对象才有此现象。这些类包括CDialog,CBitmap等。

 

而另外一些类对象就不会这样。

如我们在OnLButtonDown中添加这些代码:

	CClientDC dc(this);
	dc.MoveTo(0,0);
	dc.LineTo(100,100);

我们点击鼠标左键后,进入该函数,dc就在客户区画出了一条线。该函数执行完毕,返回主函数后,dc析构了,但是dc画出的线却保留了。

 

以上所述仅为个人观点,限本人学习程度所限,可能有诸多不足,仅供参考。

你可能感兴趣的:(非模态对话框)