2013-03-07 49 views
0

我試圖學習一些windows和directX編程,並且我正在嘗試一些不同的東西。突然間,我的窗戶停止了出現,即使這是一個成功的構建。我想我一定會搞砸了一些東西,然後我解開了一切,直到我回到我最後設法讓窗口出現的地方,但是現在當我運行時(用成功的構建)它仍然dosnt顯示:(並且即時開始想到什麼問題可能會出現,這太奇怪了。自從我上次開始工作以來,我所做的一件事就是添加som libs目錄,但我很難看出這會如何影響程序。有沒有人遇到過這個問題,如果是的話,你是如何解決它的?下面是創建窗口的func代碼(是的,我意識到無限循環,它不應該引起這個問題,這是什麼? ):用createWindowEx成功構建,窗口仍然不會出現

ps。我也嘗試改變WINDCLASSEX和WINDCLASS,所有的功能需要改變它,沒有任何diffrence ds。

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

回答

1

看起來像你需要有一個ShowWindow調用(除非InitD3D這樣做,你沒有顯示的代碼)

窗口是默認創建的不可見的,這樣就可以做各種初始化無在

發生的事情作爲替代,用戶看到你可以創建窗口已經顯現,但通常這是一個好主意,通過保持到一個單一的慣例


如果你使用GUI子系統,你可以使用標準的int main,不需要使用微軟的怪物

與GNU工具鏈,這是所有的微軟的工具,你必須告訴鏈接器接受標準代碼。 ,通過鏈接器選項/entry:mainCRTStartup


還,調用無阻塞PeekMessage意味着你的消息循環,將最有可能是CPU豬

代替,使用攔截GetMessage

,並記住退出循環時GetMessage返回0 (這表示WM_QUIT消息已發佈)

+0

嗯,這是有道理的,即時消息possitivly肯定它的工作之前oO會嘗試它。是的,它確實是一個怪物xD但是當你開始一些更高層次的編程時,你所說的方法會做什麼? – 2013-03-07 14:42:16

+0

感謝工作,感覺有點愚蠢,不知道我怎麼可能錯過它xD – 2013-03-07 14:43:57

+0

重新「它會工作時......」,標準的'主要'工程無論程序的水平;-)然而,一些圖書館可能會提供他們的擁有非標準的主要功能。例如MFC做到這一點 – 2013-03-07 14:46:45