2010-08-20 2 views
2

J'ai une application de console à partir de laquelle je crée une fenêtre.C++ Win32 Window ne répond pas

Je peux très bien faire des choses dans la fenêtre. Mais la fenêtre ne répond pas/incontrôlable par l'utilisateur.

Dès que vous passez la souris sur la fenêtre, vous obtenez le curseur en forme de sablier et vous ne pouvez pas déplacer la fenêtre.

Ce qui pourrait être à l'origine de cela?

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

Il serait extrêmement utile si vous aviez un extrait de code (minimal) qui illustre ce problème. –

+0

Gérez-vous les messages WM_MOUSE * dans votre WindowProc? – munissor

+0

Je ne gère rien, je viens d'utiliser DefWindowProc. – ronag

Répondre

8

Comme il est déjà mentionné dans les commentaires, je vais faire ce wiki communautaire

Vous devez obtenir les messages de la fenêtre et les envoyer en conséquence.

/* 
* 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); 
} 

Si vous ne le faites pas, votre fonction wndProc ne sera jamais aucun message, et Windows trouve qu'il ne répond pas (donc le sablier).

0

Une partie de la boucle de message avait été "temporairement" et je commentais loin manqué cela.