MFC中如何在模态对话框弹出后自动运行某个函数

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:10:33
RT
DoModal()创建模态对话框后,发现对话框不结束DoModal不返回。但是我想在对话框弹出后就立即运行某个函数(必须在出现对话框后运行)。请问该怎么办?
谢谢了!
不好意思。。。可能必须用模态对话框。。。

  1. 可以定义一个函数指针;假设要运行的函数原形是 void fun(); 类名为 Test

    typedef void (Test::*pFuncPointer)();

  2. 在模态对话框中定义一个 pFuncPointer m_fun;成员变量,在构造函数中加一个pFuncPointer  fun 的参数;并在实现中将这个参数传递给 m_fun = fun;

  3. 可以在模态对话框的OnInitDialog添加 m_fun()。

  4. 在创建模态对话框时如下即可:

    xxxDlg dlg(fun);

    dlg.DoModel();

那你必须将这个函数的指针传递到dlg中去,不过还有一个方法就是,你也可以不用DoModal来创建对话框,而是这样:
CXxxDlg* pDlg = new CXxxDlg;
pDlg->Create(IDD_XXX, this);
pDlg->ShowWindow(SW_SHOW);

补充1:
假如你有一个类CDo,他包含了你要实现运行的方法,那么设法获得它的指针pDo。然后这样:
CXxxDlg dlg(pDo); //修改CXxxDlg的构造函数将pDo传入dlg中。
…… //在对话框初始化的时候运行你的函数。
dlg.DoModal();
这样就可以了。

一般这种情况都用非模态,如果非要用模态,就用idealsoft所说的,在dlg中设一个变量,来保存函数指针(或者如果你想调用某个类的实例的方法,就保存实例的指针)

PS:虽然我经常这样干,但这确实是严重破坏C++程序美学的行为.

模态对话框在不返回的情况下无法执行下面的语句,所以如果lz不需要用到模态对话框可以使用Ideasoft的方法,如果坚持要用模态对话框,可以在对话框类重载OnCreate函数完成有关的功能。