Я работаю над классом MFC, который наследуется от CWnd
и создает скрытое окно в своем конструкторе.Сам объект создается внутри производной функции CWinApp :: InitInstance.
if (
this->CWnd::Create(
nullptr,
nullptr,
WS_DISABLED, // Even disabled it will receive broadcast messages.
{0, 0, 0, 0},
CWnd::GetDesktopWindow(),
fakeWindowId
) == FALSE
)
throw runtime_error{"failed to create window"};
Когда я запускаю этот код в отладочной сборке, он вызывает следующее утверждение:
Ошибка отладочного подтверждения!
Программа: C: \ WINDOWS \ SYSTEM32 \ mfc140ud.dll Файл: f: \ dd \ vctools \ vc7libs \ ship \ atlmfc \ src \ mfc \ wincore.cpp Строка: 571
Информацию о том, как ваша программа может вызвать ошибку подтверждения, см. В документации по утверждениям для Visual C ++.
(Нажмите «Повторить» для отладки приложения)
Если я игнорирую утверждение,код работает нормально и никакого вредного воздействия не наблюдается.Как мне обратиться к этому утверждению?
Я также регистрирую окно следующим образом:
BOOL HiddenWindow::PreCreateWindow(CREATESTRUCTW& cs)
{
if ( ! CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle &= ~WS_EX_CLIENTEDGE;
WNDCLASSEXW wc;
ZeroMemory(&wc, sizeof(WNDCLASSEXW));
wc.cbSize = sizeof(WNDCLASSEXW);
const auto instance{AfxGetInstanceHandle()};
if (GetClassInfoExW(instance, this->className_.c_str(), &wc) == FALSE)
{
wc.lpszClassName = this->className_.c_str();
if ( ! RegisterClassExW(&wc))
{
Logger::Fatal(
"Registering the window for copy data message failed! Messages will not be "
"copied, error code {}.",
GetLastError()
);
return FALSE;
}
}
else
Logger::Debug(
"There is already a window registered under the class name '{}'.",
toString(this->className_)
);
cs.lpszClass = _wcsdup(this->className_.c_str());
return TRUE;
}