怎么给对话框添加 InitInstance() 响应函数

如何给对话框添加 InitInstance() 响应函数
我在 MFC 单文档程序中,添加了一个对话框资源 IDD_DLG,但是想给对话框添加一个 InitInstance() 这个响应函数。

请问 VS2010中,通过什么方法能够为这个对话框 添加 InitInstance 函数?


------解决方案--------------------
手动添加定义和实现即可。
另,不知道楼主要添加的是不是App类的那个虚函数
------解决方案--------------------
引用:
我希望实现唯一实例——就是这个对话框只能有一个实例。

我知道了,你被网上的说法误导了。估计你查的网上的做法都是在InitInstance()中操作的,但是别人那样是为了保证整个程序只有唯一实例,所以要在整个程序的入口,即App类的InitInstance()中创建一个互斥对象。而你是要让其中一个对话框唯一实例,那就只需要在该对话框的入口处做代码就行了。建议直接添加该对话框的OnInitDialog函数然后继续
------解决方案--------------------
可以手动添加,但不是重载的,你添加了没作用,还得自己调用

如果这样还不行,直接用FindWindow处理,如果存在该对话框则将其置顶并return
------解决方案--------------------
如果要做对话框的初始化操作,有两个地方可选

1、对话框类的构造函数

2、对话框的OnInitDialog,此时已经窗口句柄了
------解决方案--------------------
具体的实现大概是这样的:

  上下文环境维护一个 BOOL 变量 bFlag; 这个 bFlag 只能是在对话框内部来写(修改),在Frame中是只读。

 if(!bFlag)
{
   dlg.Create(..);
   dlg.ShowWindow(..);
}

在Dlg的窗口创建、窗口销毁的时候,再去相应地修改  bFlag的值,在创建 对话框的时候,只需要判断一下 bFlag的值即可
------解决方案--------------------
引用:
Quote: 引用:

可以手动添加,但不是重载的,你添加了没作用,还得自己调用

如果这样还不行,直接用FindWindow处理,如果存在该对话框则将其置顶并return


使用 FindWindow 能够实现一次效果。
当 第一次点击菜单项调出对话框时候,能够实现这个对话框的唯一实例;但是当把这个对话框关闭的时候,再点击菜单就打不开对话框了。代码如下:

void CMainFrame::OnMyDlg()
{
// TODO: Add your command handler code here
if(!FindWindow(NULL, TEXT("信息显示"))) //如果对话框还没有被实例化过
{
m_LevelDlg.Create(MAKEINTRESOURCE(IDD_MYDLG));
m_LevelDlg.ShowWindow(SW_SHOW);
}
}


试了一下,确实如此,解决办法就是重写对话框的OnOK和OnCancel,用上DestroyWindow

void CNewDlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
DestroyWindow();
// OnOK();
}

void CNewDlg::OnBnClickedCancel()
{
// TODO: Add your control notification handler code here
DestroyWindow();
// OnCancel();
}