おそらく何か明白ですが、私はまだ非常に初心者ですので、私と一緒に裸です。 私には本当に2つの質問があります。 1つは他のものよりはるかに広いです。 まず、私のコードの一番上に、#defineを使ってウィンドウクラスの名前を付けました。 MSDNでは、main関数で "const wchar_t CLASS_NAME []"を使用することをお勧めしますが、動作させることができませんでした。これはUnicodeと関係がありますか(おそらくそれに関連すると思われるlpszの問題もありました)。とにかく、ポイントは、私はそれが動作しなかった理由を把握することはできません。 「const wchar_tをLPCSTRに代入できません」というエラーが表示されました。窓が開いていない
私の第2の、より広い質問は、コードが下にある状態であっても、エラーなしでデバッグして実行しますが、ウィンドウは開きません。私は何が欠けているのか分からない。どんな助けでも大歓迎です。ありがとう。
#include <Windows.h>
#define CLASS_NAME TEXT("Window Class")
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, PSTR lpCmdLine, int nCmdShow)
{
MSG msg;
//Registering the window class.//
WNDCLASS wc = {};
wc.lpfnWndProc = DefWindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
wc.lpszMenuName = NULL;
RegisterClass(&wc);
if (!S_OK)
{
return 0;
}
//Create Window//
HWND hwnd = CreateWindowEx(0, "CLASS_NAME", NULL, NULL, 100, 100, 800, 600, NULL, NULL, hInstance, NULL);
if (hwnd == NULL)
{
return 0;
}
//Show Window//
ShowWindow(hwnd, nCmdShow);
//Message loop//
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
DispatchMessage(&msg);
}
return msg.wParam;
}
最初に説明する問題は、MSDNの推奨事項は、コンパイラがUnicodeモードでプログラムをビルドするように構成されているが、マルチバイトモードでプログラムをビルドするように構成されているためです。あなたがどのコンパイラを使用しているか教えてくれないので、それを修正する方法をあなたにアドバイスすることはできません。 –
ああ、そうだ。私はVisual Studio 2013 Expressを使用しています。 – rgolden
'S_OK'は0と定義されていますので、'!S_OK'は 'true'と評価され、ウィンドウを決して作成しません。これは、エラー処理を実装する方法ではありません、私はあなたのコンパイラがこれについて警告したと確信しています。 – IInspectable