那你必须将这个函数的指针传递到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();
这样就可以了。
可以定义一个函数指针;假设要运行的函数原形是 void fun(); 类名为 Test
typedef void (Test::*pFuncPointer)();
在模态对话框中定义一个 pFuncPointer m_fun;成员变量,在构造函数中加一个pFuncPointer fun 的参数;并在实现中将这个参数传递给 m_fun = fun;
可以在模态对话框的OnInitDialog添加 m_fun()。
在创建模态对话框时如下即可:
xxxDlg dlg(fun);
dlg.DoModel();
一般这种情况都用非模态,如果非要用模态,就用idealsoft所说的,在dlg中设一个变量,来保存函数指针(或者如果你想调用某个类的实例的方法,就保存实例的指针)
PS:虽然我经常这样干,但这确实是严重破坏C++程序美学的行为.
模态对话框在不返回的情况下无法执行下面的语句,所以如果lz不需要用到模态对话框可以使用Ideasoft的方法,如果坚持要用模态对话框,可以在对话框类重载OnCreate函数完成有关的功能。