调用CreateWindow()func WinApi时出现错误1813

时间:2015-04-27 09:22:54

标签: c++ winapi createwindow

我是C ++和WinApi的新手。我无法在WinApi中创建一个简单的窗口。 CreateWindow()函数返回null。 GetLastError()func返回错误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();//0


 HWND 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;
}

2 个答案:

答案 0 :(得分:2)

首先,您的错误处理是错误的。该文档告诉您仅在GetLastError失败时才致电CreateWindow。并且CreateWindow失败由返回值NULL表示。在致电CreateWindow之前,您必须检查GetLastError的返回值。请务必仔细阅读documentation

您在致电RegisterClass时犯了同样的错误。在你的辩护中,这是新手Win32程序员最常犯的错误。

错误代码1813是ERROR_RESOURCE_TYPE_NOT_FOUNDdocumentation说:

  

在图像文件中找不到指定的资源类型。

同样,一旦您知道要查看的位置,您就可以通过阅读文档来了解这些信息。

这意味着CreateWindow正在尝试查找文件中不存在的资源。也许您没有设法链接菜单资源。

您的窗口程序也有缺陷。它应该是:

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

当您开始为某些消息添加定制处理时,请确保仍然为其他任何消息致电DefWindowProc

答案 1 :(得分:2)

您需要为自己无法处理的邮件返回$(".my-div").css({ "max-width": "60em", "max-height": "75%" }); 的结果 有关详细信息,请参阅here