Посмотрите на заголовок вашего диалога, и вы увидите, в качестве примера:
// Dialog Data
enum { IDD = IDD_DIALOG_ASSIGN_HISTORY };
Или вы можете навести курсор мыши на IDD
, чтобы увидеть определение:
Обратите внимание, что переменная IDD
на самом деле является enum
? В частности это не типа UINT
. В результате ваш компилятор не может найти правильное переопределение и в конечном итоге пытается использовать версию LPCTSTR
и завершается неудачей.
Как уже было сказано, вам необходимо привести переменную IDD
,
m_dialog->Create(static_cast<UINT>(CMyDialog::IDD), GetDesktopWindow());
Таким образом, компилятор не будет жаловаться.
Win32 SDK GetDesktopWindow
возвращает HWND
, а не CWnd *
. Итак, вы вернулись к тому же сценарию. Вы можете привести к CWnd *
или использовать this
, если это приемлемо.
Из моего исследования вы сможете сделать это, чтобы получить CWnd *
:
CWnd* pWnd = CWnd::FromHandlePermanent ( GetDesktopWindow());
I в комментариях было сообщено, что существует более простое решение:
m_dialog->Create(static_cast<UINT>(CMyDialog::IDD), CWnd::GetDesktopWindow());
См. CWnd::GetDesktopWindow()
для получения дополнительной информации.