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

时间:2013-03-07 14:32:01

标签: c++ window createwindowex

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

PS。我也尝试在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;
 }

1 个答案:

答案 0 :(得分:1)

看起来你需要ShowWindow来电(除非InitD3D这样做,你还没有显示代码)

默认情况下,

窗口是不可见的,因此您可以进行各种初始化,而无需用户查看正在进行的操作

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


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

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


另外,对非阻塞PeekMessage的调用意味着你的消息循环很可能是CPU占用

而是使用阻止GetMessage

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