CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 8 of 8

Threaded View

  1. #1
    Join Date
    Jan 2009
    Location
    England
    Posts
    57

    [RESOLVED] Window_buffer_size_event

    I am trying to capture a resize event for a console window. Everything works in the code I pulled off MSDN site except the resize? Could someone point me in the right direction as to why I'm not trapping this one event type?

    Code:
    #include <windows.h>
    #include <stdio.h>
    
    
    HANDLE hStdin;
    DWORD fdwSaveOldMode;
    
    
    VOID ErrorExit(LPSTR);
    VOID KeyEventProc(KEY_EVENT_RECORD);
    VOID MouseEventProc(MOUSE_EVENT_RECORD);
    VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD);
    
    
    int main(VOID)
    {
        DWORD cNumRead, fdwMode, i;
        INPUT_RECORD irInBuf[128];
        int counter=0;
    
    
        // Get the standard input handle.
        hStdin = GetStdHandle(STD_INPUT_HANDLE);
        if (hStdin == INVALID_HANDLE_VALUE)
            ErrorExit("GetStdHandle");
    
    
        // Save the current input mode, to be restored on exit.
        if (! GetConsoleMode(hStdin, &fdwSaveOldMode) )
            ErrorExit("GetConsoleMode");
    
    
        // Enable the window and mouse input events.
        fdwMode = ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT;
        if (! SetConsoleMode(hStdin, fdwMode) )
            ErrorExit("SetConsoleMode");
    
    
        // Loop to read and handle the next 100 input events.
        while (counter++ <= 100)
        {
            // Wait for the events.
    
    
            if (! ReadConsoleInput(
                    hStdin,      // input buffer handle
                    irInBuf,     // buffer to read into
                    128,         // size of read buffer
                    &cNumRead) ) // number of records read
                ErrorExit("ReadConsoleInput");
    
    
            // Dispatch the events to the appropriate handler.
            for (i = 0; i < cNumRead; i++)
            {
                switch(irInBuf[i].EventType)
                {
                    case KEY_EVENT: // keyboard input
                        KeyEventProc(irInBuf[i].Event.KeyEvent);
                        break;
    
    
                    case MOUSE_EVENT: // mouse input
                        MouseEventProc(irInBuf[i].Event.MouseEvent);
                        break;
    
    
                    case WINDOW_BUFFER_SIZE_EVENT: // scrn buf. resizing
                        ResizeEventProc( irInBuf[i].Event.WindowBufferSizeEvent );
                        break;
    
    
                    case FOCUS_EVENT:  // disregard focus events
    
    
                    case MENU_EVENT:   // disregard menu events
                        break;
    
    
                    default:
                        ErrorExit("Unknown event type");
                        break;
                }
            }
        }
    
    
        // Restore input mode on exit.
        SetConsoleMode(hStdin, fdwSaveOldMode);
    
    
        return 0;
    }
    
    
    VOID ErrorExit (LPSTR lpszMessage)
    {
        fprintf(stderr, "%s\n", lpszMessage);
    
    
        // Restore input mode on exit.
    
    
        SetConsoleMode(hStdin, fdwSaveOldMode);
    
    
        ExitProcess(0);
    }
    
    
    VOID KeyEventProc(KEY_EVENT_RECORD ker)
    {
        printf("Key event: ");
    
    
        if(ker.bKeyDown)
            printf("key pressed\n");
        else printf("key released\n");
    }
    
    
    VOID MouseEventProc(MOUSE_EVENT_RECORD mer)
    {
    #ifndef MOUSE_HWHEELED
    #define MOUSE_HWHEELED 0x0008
    #endif
        printf("Mouse event: ");
    
    
        switch(mer.dwEventFlags)
        {
            case 0:
    
    
                if(mer.dwButtonState == FROM_LEFT_1ST_BUTTON_PRESSED)
                {
                    printf("left button press \n");
                }
                else if(mer.dwButtonState == RIGHTMOST_BUTTON_PRESSED)
                {
                    printf("right button press \n");
                }
                else
                {
                    printf("button press\n");
                }
                break;
            case DOUBLE_CLICK:
                printf("double click\n");
                break;
            case MOUSE_HWHEELED:
                printf("horizontal mouse wheel\n");
                break;
            case MOUSE_MOVED:
                printf("mouse moved\n");
                break;
            case MOUSE_WHEELED:
                printf("vertical mouse wheel\n");
                break;
            default:
                printf("unknown\n");
                break;
        }
    }
    
    
    VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD wbsr)
    {
        printf("Resize event\n");
        printf("Console screen buffer is %d columns by %d rows.\n", wbsr.dwSize.X, wbsr.dwSize.Y);
    }
    Last edited by Gerald Bates; October 1st, 2014 at 11:12 AM.
    What the mind can conceive it can achieve.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured