新手求教:SDI中使用无模式对话框作为子窗口,触发事件后如何通知Doc?
SDI程序中有一个简单的对话框,显示一些基本设置。调整设置后点击对话框上的按钮时,希望Doc类数据更新,然后进行相应的操作。由于这个对话框是由CDialog类继承的,无法获得Doc类的指针,因此不知如何处理。
望不吝赐教,多谢!
问题点数:100、回复次数:4Top
1 楼xlzxlich(阳光)回复于 2005-06-03 11:58:28 得分 100
.h:
class CYourDoc;
class CDlg : public CDialog
{
DECLARE_DYNAMIC(CDlg)
public:
CDlg(CWnd* pParent = NULL); // 标准构造函数
CDlg(CYourDoc *pDoc, CWnd* pParent = NULL);
virtual ~CDlg();
CYourDoc *m_pDoc;
// 对话框数据
enum { IDD = IDD_DIALOG1 };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
DECLARE_MESSAGE_MAP()
};
.cpp:
添加
CDlg::CDlg(CYourDoc *pDoc, CWnd* pParent /*=NULL*/)
: CDialog(CDlg::IDD, pParent)
{
m_pDoc = pDoc;
}
Top
2 楼FrozenSea(FrozenSea)回复于 2005-06-03 12:15:53 得分 0
由于这个Dlg的指针是在Doc中定义的,所以doc.h中已经包含了dialog.h,这导致了我无法在dialog.h中又包含doc.h,而这里只是声明了这个类型。
结果就是在dialog.cpp中调用m_pDoc->Func()的时候,告诉我没有定义这个函数
error C2027: use of undefined type 'CPointViewer2Doc'
e:\work\program\vc6\pointviewer2\dlgselectclu.h(13) : see declaration
of 'CPointViewer2Doc'
怎么处理才好?多谢了!
Top
3 楼FrozenSea(FrozenSea)回复于 2005-06-07 11:14:15 得分 0
最后在dialog.cpp里面包含了doc.h
虽然个人觉得风格不太好,但也只好这样了。Top
4 楼eagle_boy()回复于 2005-07-01 12:18:17 得分 0
如果有Doc指针的话,定义一个用户消息,当需要更新时给Doc对象peek一个message,在Doc里面用消息函数处理Top




