C ++ Win32 Window没有响应

时间:2010-08-20 09:44:08

标签: c++ winapi

我有一个控制台应用程序,我可以从中创建一个窗口。

我可以很好地在窗口中渲染内容。但是窗口没有响应/用户无法控制。

只要将鼠标悬停在窗口上,就会得到沙漏光标并且无法移动窗口。

可能导致这种情况的原因是什么?

编辑:

    WNDCLASSEX wndClass;         // Window class
    ZeroMemory(&wndClass, sizeof(wndClass)); // Clear the window class structure
    wndClass.cbSize = sizeof(WNDCLASSEX); 
    wndClass.style          = CS_HREDRAW | CS_VREDRAW | CS_CLASSDC;
    wndClass.lpfnWndProc    = DefWindowProc;
    wndClass.cbClsExtra     = 0;
    wndClass.cbWndExtra     = 0;
    wndClass.hInstance      = nullptr;
    wndClass.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wndClass.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wndClass.lpszMenuName   = NULL;//MAKEINTRESOURCE(IDR_MAINMENU);
    wndClass.lpszClassName  = _classname.c_str();
    wndClass.hIconSm        = 0;

    if (RegisterClassEx(&wndClass) == 0)// Attemp to register the window class
        throw std::exception("WINDOW ERROR: Failed to register the window class!");

    DWORD dwStyle = 0;              // Window styles
    DWORD dwExStyle = 0;            // Extended window styles

    dwStyle = WS_OVERLAPPEDWINDOW |        // Creates an overlapping window
              WS_CLIPCHILDREN |            // Doesn"t draw within child windows
              WS_CLIPSIBLINGS;              // Doesn"t draw within sibling windows

    //adjust window size
    RECT rMain;
    rMain.left = 0;
    rMain.right = width;
    rMain.top = 0;
    rMain.bottom = height;  

    AdjustWindowRect(&rMain, dwStyle, 0);

    // Attempt to create the actual window
    _hwnd = CreateWindowEx( dwExStyle,     
                            className,
                            windowTitle,      
                            dwStyle,         
                            0, 0,           
                            rMain.right - rMain.left,
                            rMain.bottom - rMain.top,  
                            nullptr,             
                            0,  
                            nullptr,
                            0); 


    ShowWindow(_hwnd, SW_SHOW);
    SetForegroundWindow(_hwnd);
    SetFocus(_hwnd);

2 个答案:

答案 0 :(得分:8)

由于已在评论中提及,我将制作此社区维基

您需要获取窗口的消息并相应地发送它们。

/* 
 *  HWND hWnd: this is the handle to your window (that is returned from CreateWindow[Ex]
*/
MSG msg;
while (GetMessage(&msg, hWnd, NULL, NULL) > 0){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

如果你不这样做,你的wndProc函数将永远不会收到任何消息,并且Windows发现它没有响应(因此沙漏)。

答案 1 :(得分:0)

消息循环的一部分被“暂时”评论过,我错过了。