MFC对话框父对话框通过按键Button弹出新对话框,要如何实现? 20
BOOLCModalessTest::Create(LPCTSTRlpszClassName,LPCTSTRlpszWindowName,DWORDdwStyle,con...
BOOL CModalessTest::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::Create(IDD, pParentWnd);
}
void CTE_CONDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CModalessTest* pDlg = new CModalessTest();
pDlg->Create(CModalessTest::IDD,this);
pDlg->ShowWindow(SW_SHOW);
}
显示错误为E:\tem_con\TE_CON\TE_CONDlg.cpp(222) : error C2660: 'Create' : function does not take 2 parameters
Error executing cl.exe. 展开
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::Create(IDD, pParentWnd);
}
void CTE_CONDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CModalessTest* pDlg = new CModalessTest();
pDlg->Create(CModalessTest::IDD,this);
pDlg->ShowWindow(SW_SHOW);
}
显示错误为E:\tem_con\TE_CON\TE_CONDlg.cpp(222) : error C2660: 'Create' : function does not take 2 parameters
Error executing cl.exe. 展开
展开全部
你CModalessTest对话框的Create咋这么复杂? 应该这样就可以了
BOOL CModalessTest::Create(CWnd* pParentWnd)
{
// TODO: 在此添加专用代码和/或调用基类
return CDialog::Create(CModalessTest::IDD, pParentWnd);
}
然后在 void CTE_CONDlg::OnButton1() 函数中
CModalessTest* pDlg = new CModalessTest();
pDlg->Create(this);
BOOL CModalessTest::Create(CWnd* pParentWnd)
{
// TODO: 在此添加专用代码和/或调用基类
return CDialog::Create(CModalessTest::IDD, pParentWnd);
}
然后在 void CTE_CONDlg::OnButton1() 函数中
CModalessTest* pDlg = new CModalessTest();
pDlg->Create(this);
追问
这个貌似是不可以自己定义Create的,按照上述做完会显示:Cannot find the definition (implementation) of this function
追答
CModalessTest的头文件中没有相应修改成员函数原型?
展开全部
响应button消息,处理该消息
继承一个CDialog 类,
new 继承类的对话框对象,//模态,非模态对话框。
显示对话框
继承一个CDialog 类,
new 继承类的对话框对象,//模态,非模态对话框。
显示对话框
更多追问追答
追问
求具体指导
追答
找到资源那里,插入个对话框资源ID任意,双击,提示这是新的资源是否需要创建类,按yes,
选择MFC的类,给这个对话框关联的类取个名字,你任意,下面选择基类,CDialog,点击ok完成。
响应button消息,classwizard或者资源对话框上双击该按钮,添加按钮单击消息,编辑代码...
添加头文件“....h”,刚才对话框关联类的头文件
创建对话框对象,显示,模态对话框如:
void ******::OnButton1()
{
CMyDialog dg;
dg.DoModal();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有必要自己定义Create函数,使用缺省的就可以,如果你定义了,就自动调用你定义的函数,可是你自己定义的Create函数确实不止2个参数,如果你不定义,就会调用缺省的函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是不是重载复盖了Create?
你看一下参数类型都不对,怎么可能编绎成功呢。
你看一下参数类型都不对,怎么可能编绎成功呢。
追问
什么意思?我刚开始学,完全菜
追答
显示错误为E:\tem_con\TE_CON\TE_CONDlg.cpp(222) : error C2660: 'Create' : function does not take 2 parameters
这个错误是说不存在 2个参数的Create函数。
C++中同名复盖,是你的自己定义的Create函数复盖了CDialog的Create
而你定义的这个:
BOOL CModalessTest::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
跟你调用的参数类型都不一样:
pDlg->Create(CModalessTest::IDD,this); //此时调用的是CModalessTest::Create,而不是CDialog::Create,因此调用时要按CModalessTest::Create参数填写调用。
//这个跟MFC没什么关系的,我建议你看一下,C++重载,复盖,虚函数等的用法
C++中,同类中,同名为重载。基类与派生类中,同名为复盖。同名加virtual为虚函数,虚函数调用是根据相对应该的类的指针实现。你定义的Create是CDialog的派生类CModalessTest中,Create虽然在CDialog是虚函数,但
CModalessTest* pDlg = new CModalessTest(); //pDlg 为CModalessTest 对象指针,而非CDialog 对象指针
pDlg->Create(this); //此处调用的是 CModalessTest::Create,而非CDialog::Create
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把新的Dialog设置成父窗体的成员变量。不要设置成局部变量。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询