Thread: Drawing a rectangle

  1. #1
    Reverse Engineer maxorator's Avatar
    Join Date
    Aug 2005
    Location
    Estonia
    Posts
    2,318

    Drawing a rectangle

    This code draws a rectangle but if I make it redraw the window, there is a pixel row on the sides between the content (part of it is rectangle) and border, which takes the color of the background behind that window and that stays until it needs to redraw it again. This is really strange. Code:
    Code:
    #include <windows.h>
    
    /*  Declare Windows procedure  */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    RECT tangle;
    /*  Make the class name into a global variable  */
    char szClassName[ ] = "WindowsApp";
    
    int WINAPI WinMain (HINSTANCE hThisInstance,
                        HINSTANCE hPrevInstance,
                        LPSTR lpszArgument,
                        int nFunsterStil)
    
    {
        HWND hwnd;               /* This is the handle for our window */
        MSG messages;            /* Here messages to the application are saved */
        WNDCLASSEX wincl;        /* Data structure for the windowclass */
    
        /* The Window structure */
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
        wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        /* Use default icon and mouse-pointer */
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;                 /* No menu */
        wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
        wincl.cbWndExtra = 0;                      /* structure or the window instance */
        /* Use Windows's default color as the background of the window */
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        /* Register the window class, and if it fails quit the program */
        if (!RegisterClassEx (&wincl))
            return 0;
    
        /* The class is registered, let's create the program*/
        hwnd = CreateWindowEx (
               0,                   /* Extended possibilites for variation */
               szClassName,         /* Classname */
               "Windows App",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               806,                 /* The programs width */
               847,                 /* and height in pixels */
               HWND_DESKTOP,        /* The window is a child-window to desktop */
               NULL,                /* No menu */
               hThisInstance,       /* Program Instance handler */
               NULL                 /* No Window Creation data */
               );
    
        /* Make the window visible on the screen */
        ShowWindow (hwnd, nFunsterStil);
        
        DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE);
        dwStyle &= ~(WS_SIZEBOX|WS_MAXIMIZEBOX);
        SetWindowLong(hwnd, GWL_STYLE, dwStyle);
        
        tangle.left=0;
        tangle.right=800;
        tangle.top=0;
        tangle.bottom=780;
        
        /* Run the message loop. It will run until GetMessage() returns 0 */
        while (GetMessage (&messages, NULL, 0, 0))
        {
            /* Translate virtual-key messages into character messages */
            TranslateMessage(&messages);
            /* Send message to WindowProcedure */
            DispatchMessage(&messages);
        }
    
        /* The program return-value is 0 - The value that PostQuitMessage() gave */
        return messages.wParam;
    }
    
    
    /*  This function is called by the Windows function DispatchMessage()  */
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)                  /* handle the messages */
        {
            case WM_PAINT:
                PAINTSTRUCT ps;
                BeginPaint(hwnd,&ps);
                FillRect(ps.hdc,&tangle,(HBRUSH)COLOR_INFOBK);
                EndPaint(hwnd,&ps);
                break;
            case WM_DESTROY:
                PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
                break;
            default:                      /* for messages that we don't deal with */
                return DefWindowProc (hwnd, message, wParam, lParam);
        }
    
        return 0;
    }

  2. #2
    Registered User kryptkat's Avatar
    Join Date
    Dec 2002
    Posts
    638
    worked fine for meow. the only thing that did not work was your full screen button. no pixel rows with background color. just black rectangle in window. check your monitor cable?

  3. #3
    ... arjunajay's Avatar
    Join Date
    May 2005
    Posts
    203
    May be its because the documentation says some thing about NOT including the bottom row and rightmost coloumn in drawing a rectangle.
    P.S. I'm only a noob when it comes to GDI

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. drawing a rectangle!
    By 3pid in forum C++ Programming
    Replies: 11
    Last Post: 04-24-2008, 04:43 AM
  2. Drawing a rectangle in a control
    By Joelito in forum Windows Programming
    Replies: 6
    Last Post: 12-15-2006, 07:51 PM
  3. Drawing rectangle in a web page
    By alphaoide in forum Tech Board
    Replies: 3
    Last Post: 02-20-2005, 07:40 PM
  4. Point passed rectangle...
    By Hunter2 in forum Game Programming
    Replies: 15
    Last Post: 10-10-2003, 09:57 AM
  5. Drawing a grid on a plain rectangle
    By kamikazeecows in forum Windows Programming
    Replies: 1
    Last Post: 04-01-2002, 06:51 PM