CDialog::Create出错

zhou-kang 2017-12-14 11:06:33
BOOL NewDialg::Create()
{
return CDialog::Create(IDD_DIALOG1, m_pview);
}

编译错误
error C2664: 'BOOL CDialog::Create(LPCTSTR,CWnd *)' : cannot convert parameter 1 from '' to 'LPCTSTR'

给出CDialog
class CDialog : public CWnd
{
public:
virtual BOOL Create(LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL);
virtual BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
}


分析原因是CDialog::Create(IDD_DIALOG1, m_pview);调用的是第一个Create,所以参数不对,但是为什么不调用第二个Create,我看别人的代码也是这么写的。
...全文
509 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2017-12-15
  • 打赏
  • 举报
回复
9,10,楼是 vc6 。没有编译错的!
zhou-kang 2017-12-15
  • 打赏
  • 举报
回复
测试了,首先,采用了MAKEINTRESOURCE,单位的电脑能编译通过,家里的电脑不行。 然后百度了很多资料,有人说visual studio的类型转换比较严格,类型不会默认兼容,需要强制进行类型转化, return CDialog::Create((LPCTSTR)IDD_DIALOG1, (CWnd*)m_pview); 此时就编译通过了。 但是 return CDialog::Create((UINT)IDD_DIALOG1, (CWnd*)m_pview); 还是编译不通过,也就是说这里还是只调用了第一个CDialog::Create(),没有调用第二个,求大神解答,为什么没有调用第二个?怎么才能调用第二个? 引申另一个问题,单文档MFC默认的视图类CMFCStudyView在客户区单击,调用非模态对话框NewDialg,m_pdlg是CMFCStudyView的私有成员函数,没有初始化, 为什么触发OnLButtonDown后,直接进入了下面的m_pdlg->SetActiveWindow();我都没有创建m_pdlg,所以运行后,直接崩掉,即使在CMFCStudyView的构造函数 初始化为NULL,也是一样进入m_pdlg->SetActiveWindow(); 最后直接崩掉, void CMFCStudyView::OnLButtonDown(UINT nFlags, CPoint point) { if (m_pdlg!=NULL) m_pdlg->SetActiveWindow(); //再次单击,激活对话框 else { m_pdlg = new NewDialg(this); //首次单击创建非模态对话框 m_pdlg->Create(); } CView::OnLButtonDown(nFlags, point); } 但是直接创建非模态对话框是可以运行的,为什么? void CMFCStudyView::OnLButtonDown(UINT nFlags, CPoint point) { m_pdlg = new NewDialg(this); //首次单击创建非模态对话框 m_pdlg->Create(); CView::OnLButtonDown(nFlags, point); }
red-fly 2017-12-15
  • 打赏
  • 举报
回复
能确定这个编译错误是 return CDialog::Create(IDD_DIALOG1, m_pview); 这一行吗?
zhou-kang 2017-12-14
  • 打赏
  • 举报
回复
自己顶一下,麻烦各路大神给看看
zhou-kang 2017-12-14
  • 打赏
  • 举报
回复
第二个Create的第一个参数类型UINT是无符号整型的别名 typedef unsigned int UINT; IDD_DIALOG1 是对话框的ID #define IDD_DIALOG1 310
schlafenhamster 2017-12-14
  • 打赏
  • 举报
回复
BOOL CAboutDlg::Create()
{
CWnd *pview=AfxGetMainWnd();
return CDialog::Create(IDD_ABOUTBOX,pview);
}

也没有错 ?
schlafenhamster 2017-12-14
  • 打赏
  • 举报
回复
BOOL CAboutDlg::Create()
{
CWnd *pview=0;
return CDialog::Create(IDD_ABOUTBOX,pview);
}

没有错 ?
paschen 2017-12-14
  • 打赏
  • 举报
回复
return CDialog::Create(MAKEINTRESOURCE(IDD_DIALOG1), m_pview);呢
zgl7903 2017-12-14
  • 打赏
  • 举报
回复
NewDialg.cpp 中 #include "resource.h" 试试, 可能ID没有被正常识别
zhou-kang 2017-12-14
  • 打赏
  • 举报
回复
我已经绝望了。。。
zhou-kang 2017-12-14
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
在资源编辑框中添加对话框资源, ID修改为 IDD_DIALOG1 , 然后你的代码就可以用了, 如果已经有资源,那把函数参数中的 IDD_DIALOG1 替换成现有的资源ID


已经添加了对话框资源,并且ID就是IDD_DIALOG1
zgl7903 2017-12-14
  • 打赏
  • 举报
回复
在资源编辑框中添加对话框资源, ID修改为 IDD_DIALOG1 , 然后你的代码就可以用了, 如果已经有资源,那把函数参数中的 IDD_DIALOG1 替换成现有的资源ID
zhou-kang 2017-12-14
  • 打赏
  • 举报
回复
已过去两小时。。。
采用MFC编程时,子对话框常常要向主窗口传递数据,获取主窗口的对象指针便显得非常重要了。 void CMyView::OnModel() //点击菜单,创建对话框的几种变量设置,总共是4种方法,模态的一种,非模态的三种 { // TODO: Add your command handler code here //CDialog modDlg(MAKEINTRESOURCE(IDD_MODEL),this); //modDlg.DoModal(); static bool num=0;//第一次执行第一段,以后再打开都执行第二段。 static CModDlg Dlgless(this);//将MyView指针传进去 if (0==num) { CModDlg mod(this);//将MyView指针传进去 //mod.SetWindowText("局部变量——模态对话框");不允许动态设置模态对话框标题?这句编绎会出错 mod.DoModal(); Dlgless.Create(IDD_MODEL);//重复执行会出错,要放到构造函数中好 Dlgless.ShowWindow(SW_SHOW); Dlgless.SetWindowText("局部静态变量——非模对话框"); m_dlgless.Create(IDD_MODEL,this);//重复执行会出错,要放到构造函数中好 m_dlgless.ShowWindow(SW_SHOW); m_dlgless.SetWindowText("成员非指针变量——非模对话框"); m_pDlgless=new CModDlg(this);//重复执行会出错,要放到构造函数中好, m_pDlgless->Create(IDD_MODEL);//重复执行会出错,要放到构造函数中好, m_pDlgless->ShowWindow(SW_SHOW); m_pDlgless->SetWindowText("成员指针变量——非模对话框"); num=1; } else { Dlgless.ShowWindow(SW_SHOW); m_dlgless.ShowWindow(SW_SHOW); m_pDlgless->ShowWindow(SW_SHOW); } }

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧