MyDialog(CWnd* pParent = NULL); //(1)
MyDialog(CView* pView); //(2) CChildView::CChildView()
{
pDlg = new MyDialog(this);
}实在想不通,编译器居然调用第一个构造函数
后来强行指定类型才调用(2)构造函数pDlg = new MyDialog((CView*) this);
我知道CView是派生于CWnd,但是this指针明明就是CView类型啊.
难道编译器更喜欢参数缺省吗?
相当于
pDlg = new MyDialog(); this指针可以不用写 this 指向的是当前对象本身。也就是CChildView的构造的对象
所以调用MyDialog(CWnd* pParent = NULL); //(1)
上边的构造函数有默认值.pDlg = new MyDialog((CView*) this);
你相当于把this所指定的对象转换成了cview了。所以掉用MyDialog(CView* pView);
这个东东是MFC 自已生成的啊. 我有什么办法....MyDialog(CView* pView); //(2) 这个才是我想的
我要通过构造函数将view针指传给Dialog这样一来.非模态对话框才能给Dialog发消息
UpdateDate()
pView->SendMessage(WM_ENDDIALOG);
DestroyWindow( );
{
public:
void printCWnd() { cout << "This is CWnd" << endl;}
};class CView : public CWnd
{
public:
void printCView() {cout << "This is CView" << endl; }
};class Dialog: public CWnd //Dialog重载两个构造函数
{
public:
Dialog(CWnd* pCWnd) { pCWnd->printCWnd(); } //构(1)
Dialog(CView* pCView) { pCView->printCView(); } //构(2)
};class ChildView:public CView
{
public:
ChildView() { Dialog* pMyDlg = new Dialog(this); }
};void main()
{
ChildView test;
system("PAUSE");
}/*
运行结果:
This is CView
请按任意键继续. . .
说明程序还是调用了2号构造函数
可是在MFC里面为什么却不一样呢????