2013-03-07 129 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