Функция RegisterClassEx возвращает ненулевое значение, однако функция CreateWindowEx возвращает значение null. Я прочитал несколько ответов, и я, кажется, правильно слежу за всем. Может кто-нибудь, пожалуйста, просмотрите мой код и скажите мне, что происходит не так? Я предполагаю, что с моим WndProc что-то не так, но я не могу понять, что происходит не так. Я пытаюсь создать класс, который может рисовать окна, и, следовательно, функция WndProc является членом класса.Невозможно создать окно
void windowPainter::registerWindow()
{
WNDCLASSEX wcex = { 0 };
wcex.cbSize = sizeof(wcex);
wcex.lpfnWndProc = windowPainter::WndProc;
wcex.hInstance = m_hInstance;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.lpszClassName = windowClassName;
ATOM returnValue = RegisterClassEx(&wcex);
int lastErrorValue = GetLastError();
}
void windowPainter::createWindow()
{
DWORD dwStyle1 = WS_EX_TOPMOST | WS_EX_LAYERED;
if (m_isClickThrough)
dwStyle1 = dwStyle1 | WS_EX_TRANSPARENT;
DWORD dwStyle2 = WS_POPUP;
RECT rc = { m_windowOriginX, m_windowOriginY, m_windowSizeX, m_windowSizeY };
AdjustWindowRect(&rc, dwStyle1, FALSE);
BYTE alpha_value = 255;
m_hWnd = CreateWindowEx(dwStyle1,windowClassName, windowTitle, dwStyle2, rc.left,
rc.top, rc.right,
rc.bottom,
NULL, NULL, m_hInstance, NULL);
}
LRESULT CALLBACK windowPainter::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PAINTSTRUCT ps;
HDC hdc;
UNREFERENCED_PARAMETER(lParam);
windowPainter* pThis = NULL;
if (WM_CREATE == message)
{
pThis = (windowPainter*)((LPCREATESTRUCT)lParam)->lpCreateParams;
SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)pThis);
return DefWindowProc(hWnd, message, wParam, lParam);
}
else
{
pThis = (windowPainter*)GetWindowLongPtr(hWnd, GWLP_USERDATA);
}
if (pThis)
switch (message)
{
case WM_PAINT:
if (pThis)
{
//do painting using members of pThis
}break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
pThis->onLeftButtonClick();
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
Проблема была в переменной windowClassName. Я не приписывал значение, которое получал после вызова c_str() (LPCWSTR) – TheBlueNotebook