0

私はいくつかのウィンドウと directX プログラミングを学ぼうとしていますが、さまざまなことを試していました。ビルドが成功したにもかかわらず、突然ウィンドウが表示されなくなった。私は何かを台無しにしたに違いないと考え、最後にウィンドウを表示することができた場所に戻るまですべてを元に戻しましたが、今は(ビルドが成功して)実行してもまだ表示されません:(そして何が問題なのかアイデアが尽き始めています.とても奇妙です.前回それを機能させてから行ったことの1つは、いくつかのlibsディレクトリを追加することでしたが、それがどのように影響するかを理解するのに苦労しています.このようにプログラムしてください. あなたの誰かが以前にこの問題に遭遇したことがありますか? もしそうなら, どうやってそれを解決しましたか? ウィンドウを作成する func のコードは次のとおりです.

ps。また、WINDCLASSEXとWINDCLASSの間で変更を試みましたが、変更する必要があるすべての機能で、違いはありませんでした。

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow){
    // Register the window class.
    const wchar_t CLASS_NAME[]  = L"Sample Window Class";

    WNDCLASS wc = { };

    wc.lpfnWndProc   = WindowProc;
    wc.hInstance     = hInstance;
    wc.lpszClassName = CLASS_NAME;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;

    RegisterClass(&wc);

    RECT wr = {0, 0, 500, 400};    // set the size, but not the position
    AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE);    // adjust the size

    // Create the window.

    HWND hwnd = CreateWindowEx(
    0,                              // Optional window styles.
    CLASS_NAME,                     // Window class
    L"My first window",    // Window text
    WS_OVERLAPPEDWINDOW,            // Window style
    CW_USEDEFAULT, CW_USEDEFAULT,//position x,y
    wr.right-wr.left, wr.bottom-wr.top,//width, height
    NULL,       // Parent window    
    NULL,       // Menu
    hInstance,  // Instance handle
    NULL        // Additional application data
    );

    if (hwnd == NULL){
        return 0;
    }



    InitD3D(hwnd);
     // Run the message loop.

    MSG msg = { };
    while (true){
    if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    else{

    }
    }

    return 0;
 }
4

1 に答える 1

1

ShowWindowそこに呼び出しが必要なようです(そうでない限りInitD3D、コードは表示されていません)

ウィンドウはデフォルトで非表示に作成されるため、ユーザーに何が起こっているのかを知らずにさまざまな初期化を行うことができます

別の方法として、既に表示されているウィンドウを作成することもできますが、一般的には単一の規則に従うことをお勧めします


ちなみに、標準int mainを使用するだけで、Microsoft monstrosity を使用する必要はありません

GNU ツールチェーンではこれだけです。Microsoft のツールでは、GUI サブシステムを使用する場合は、リンカー オプションを使用して、リンカーに標準コードを受け入れるように指示する必要があります/entry:mainCRTStartup


また、ノンブロッキングの呼び出しPeekMessageは、メッセージ ループが CPU を大量に消費する可能性が高いことを意味します。

代わりに、ブロッキングを使用してくださいGetMessage

GetMessage0 が返されたらループを終了することを忘れないでください(WM_QUITメッセージが投稿されたことを示します) 。

于 2013-03-07T14:38:28.120 に答える