0

私は 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;
}
4

2 に答える 2

2

まず、エラー処理が間違っています。ドキュメントには、失敗したGetLastError場合にのみ呼び出すように指示されています。CreateWindowまた、CreateWindow失敗は戻り値 によって示されますNULLCreateWindowを呼び出す前に、 の戻り値を確認する必要があります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他のメッセージを呼び出していることを確認してください。

于 2015-04-27T09:28:55.343 に答える
2

DefWindowProc自分で処理しないメッセージの結果を返す必要があります。
詳しくはこちらをご覧ください。

于 2015-04-27T09:30:38.393 に答える