Ошибка 1813 при вызове CreateWindow () func WinApi

Я новичок в C ++ и WinApi. Я не могу создать простое окно в WinApi. Функция CreateWindow () возвращает ноль. Функция GetLastError () возвращает ошибку 1813.
Но перед созданием окна GetLastError () возвращает 0. Извините за мой английский. Вот мой полный код:

#include <Windows.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
LPCWSTR szWindowClass = TEXT("WndClass");
LPCWSTR szTitle = TEXT("Main window");
DWORD dwError;

WNDCLASS wc;
wc.style = CS_OWNDC;
wc.hInstance = hInstance;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);

wc.lpfnWndProc = WndProc;
wc.lpszClassName = szWindowClass;
wc.lpszMenuName = L"MenuName";
dwError = GetLastError(); //0

RegisterClass(&wc);
dwError = GetLastError();//0HWND hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);//NULL

dwError = GetLastError();//1813 =(
return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
return 0;
}

0

Решение

Прежде всего, ваша обработка ошибок неверна. Документация говорит вам позвонить GetLastError только если CreateWindow не удалось. А также CreateWindow сбой обозначается возвращаемым значением NULL, Вы должны проверить возвращаемое значение CreateWindow перед звонком GetLastError, Пожалуйста, убедитесь, что вы прочитали документация внимательно.

Вы делаете точно такую ​​же ошибку в вашем звонке RegisterClass, В вашу защиту, это самая распространенная ошибка, совершаемая начинающими программистами Win32.

Код ошибки 1813, есть ERROR_RESOURCE_TYPE_NOT_FOUND, документация говорит:

Указанный тип ресурса не может быть найден в файле изображения.

Опять же, вы можете узнать эту информацию, прочитав документацию, когда вы знаете, где искать.

Это значит, что CreateWindow пытается найти ресурс, которого нет в файле. Возможно, вам не удалось связать ресурс меню.

Ваша процедура окна также неисправна. Так должно быть:

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
return DefWindowProc(hWnd, Msg, wParam, lParam);
}

Когда вы начнете добавлять обработку на заказ для определенных сообщений, убедитесь, что вы по-прежнему вызываете DefWindowProc для любых других сообщений.

2

Другие решения

Вам нужно вернуть результат DefWindowProc за сообщения, с которыми вы не справляетесь.
Увидеть Вот для дополнительной информации.

2