使用 createWindowEx 成功构建,窗口仍然不会出现



我正在尝试学习一些windows和directX编程,我正在尝试一些不同的东西。当我的窗口突然停止出现,即使它是一个成功的构建。我想我一定搞砸了一些东西,我撤消了一切,直到我回到我最后一次设法让窗口出现的地方,但现在当我运行时(成功构建)它仍然没有显示:(我开始想不出问题可能是什么,它太奇怪了。自从上次我让它工作以来,我所做的一件事是添加一些库目录,但我很难看到这会如何影响程序。你们中有人遇到过这个问题吗?如果遇到过,你们是怎么解决的?下面是创建窗口的函数代码(是的,我知道无限循环,但它不应该导致这个问题,对吧?):

p。我也试过在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;
 }

看起来您需要在那里调用ShowWindow(除非InitD3D这样做,否则您没有显示代码)

窗口在默认情况下是不可见的,所以你可以在用户看不到

的情况下进行各种初始化。

作为另一种选择,您可以创建已经可见的窗口,但通常保持单一约定

是一个好主意。
顺便说一下,你可以使用标准的int main,不需要使用微软的怪物

与GNU工具链,这就是全部,与微软的工具,然后你必须告诉链接器接受标准代码,如果你使用GUI子系统,通过链接器选项/entry:mainCRTStartup


同样,对非阻塞PeekMessage的调用意味着你的消息循环很可能是一个CPU占用者

使用阻塞GetMessage

,并记住在GetMessage返回0时退出循环(这表明已经发布了WM_QUIT消息)

相关内容

  • 没有找到相关文章

最新更新