0

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

附言。我还尝试在 WINDCLASSEX 和 WINDCLASS 之间进行更改,所有需要更改的功能都没有任何区别 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;
 }
4

1 回答 1

1

看起来你需要ShowWindow在那里打电话(除非InitD3D你没有显示代码)

默认情况下,窗口是不可见的,因此您可以进行各种初始化,而无需用户看到发生了什么

作为替代方案,您可以创建已经可见的窗口,但通常最好遵守单一约定


顺便说一句,你可以只使用一个标准int main,不需要使用微软的怪物

使用 GNU 工具链就是这样,使用 Microsoft 的工具,如果您使用 GUI 子系统,则必须通过链接器选项告诉链接器接受标准代码/entry:mainCRTStartup


此外,对非阻塞的调用PeekMessage意味着您的消息循环很可能会占用 CPU

相反,使用阻塞GetMessage

并记得在返回 0 时退出循环GetMessage(这表示WM_QUIT消息已发布)

于 2013-03-07T14:38:28.120 回答