2010-08-20 6 views
2

У меня есть консольное приложение, из которого я создаю окно.C++ Win32 Window не отвечает

Я могу изобразить материал в окне просто отлично. Но окно не реагирует/не контролируется пользователем.

Как только вы наводите указатель мыши на окно, вы получаете курсор песочных часов и не можете перемещать окно.

Что может быть причиной этого?

EDIT:

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); 
+0

Было бы очень полезно, если бы у вас был (минимальный) фрагмент кода, который демонстрирует эту проблему. –

+0

Вы обрабатываете сообщения WM_MOUSE * в WindowProc? – munissor

+0

Я ничего не обрабатываю, я просто использую DefWindowProc. – ronag

ответ

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 находит его зависания (таким образом, песочные часы).

0

Часть цикла обработки сообщений была «временно» прокомментировал далеко, и я пропустил это.

Смежные вопросы