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,我看别人的代码也是这么写的。
...全文
510 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
  • 打赏
  • 举报
回复
已过去两小时。。。

15,979

社区成员

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

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