怎么给对话框添加 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的值即可
------解决方案--------------------
试了一下,确实如此,解决办法就是重写对话框的OnOK和OnCancel,用上DestroyWindow
我在 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的值即可
------解决方案--------------------
试了一下,确实如此,解决办法就是重写对话框的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();
}