【发布时间】:2020-07-18 22:21:21
【问题描述】:
在程序中,我尝试在单击菜单项时弹出一个对话框。
void CMyDoc::OnFileTest()
{
m_dialog = new CMyDialog;
m_dialog->Create(CMyDialog::IDD, GetDesktopWindow());
m_dialog->ShowWindow(SW_SHOW);
}
当我将鼠标悬停在“创建”功能(VS-2008 IDE)上时,它显示了两个重载。
Create(LPCTSTR..., CWnd *);
Create(UINT..., CWnd *);
但是当我构建它时,为什么编译器坚持它应该采用第一个。如何解决?
error C2664: 'BOOL CDialog::Create(LPCTSTR,CWnd *)' : cannot convert parameter 1 from '' to 'LPCTSTR'
编辑
我尝试按照答案中的建议将 IDD 转换为 UINT,但它不起作用...
error C2664: 'BOOL CDialog::Create(LPCTSTR,CWnd *)' : cannot convert parameter 1 from 'UINT' to 'LPCTSTR'
其实我复制了这个项目的代码:https://www.codeproject.com/Articles/1651/Tutorial-Modeless-Dialogs-with-MFC,不用强制转换也可以编译。
一个区别是我在 Doc 中使用 Create,而上面在 Dialog 中使用??
【问题讨论】:
-
你能告诉我们
CMyDialog类的定义——具体来说,(大概是static)IDD成员是如何声明和定义的? -
@AdrianMole 这些是系统在旧版 Visual Studio 中创建对话框时声明的标准变量。
-
@AndrewTruckle 好点!我不再使用那些自动生成的 IDD,我已经忘记了它们的本质!
-
@AdrianMole 我的两个项目始于 2002 年,所以有很多类都包含这些
IDD定义。:) -
查看我的更新答案。
标签: c++ visual-studio visual-c++ mfc