smkdude 20 Newbie Poster

Hello,

I am in the process of writing a board game, and part of that game involves having a user click on a hexagonal tile, and when they do and certain conditions are met, the tile should change color to match the player's color.

Below is a sample program which shows two hexagons on the screen, one green, one red.
When I click on one, I would like to change its color to yellow, and when I click on the other one, I would like to change its color to blue.

#include <windows.h>

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "HexColourChange";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nCmdShow)
{
    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 colour 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 */
               "Hexagon Colour changes",       /* Title Text */
               WS_OVERLAPPEDWINDOW, /* default window */
               CW_USEDEFAULT,       /* Windows decides the position */
               CW_USEDEFAULT,       /* where the window ends up on the screen */
               544,                 /* The programs width */
               375,                 /* 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, nCmdShow);

    /* 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)
{

    HDC hDC;
    PAINTSTRUCT Ps;

    HBRUSH BrushGreen  = CreateSolidBrush(RGB(0, 125, 5));
    HBRUSH BrushRed    = CreateSolidBrush(RGB(255, 2, 5));
    HBRUSH BrushYellow = CreateSolidBrush(RGB(250, 255, 5));
    HBRUSH BrushBlue   = CreateSolidBrush(RGB(0, 2, 255));


    POINT Pt[6];
    POINT Pt2[6];

    // Hexagon 0
    Pt[0].x = 144;
    Pt[0].y =  33;
    Pt[1].x = 112;
    Pt[1].y = 49;
    Pt[2].x = 112;
    Pt[2].y =  82;
    Pt[3].x = 144;
    Pt[3].y =  98;
    Pt[4].x = 176;
    Pt[4].y = 82;
    Pt[5].x = 176;
    Pt[5].y =  49;

    Pt2[0].x = 105;
    Pt2[0].y =  92;
    Pt2[1].x = 73;
    Pt2[1].y = 108;
    Pt2[2].x = 73;
    Pt2[2].y =  141;
    Pt2[3].x = 105;
    Pt2[3].y =  157;
    Pt2[4].x = 137;
    Pt2[4].y = 141;
    Pt2[5].x = 137;
    Pt2[5].y =  108;



    switch (message)                  /* handle the messages */
    {

    case WM_LBUTTONUP:
    {
        //I assume something the code needs to be put in here,
        // and possibly call InvalidateRect()
        break;
    }
    case WM_PAINT:
    {
        hDC = BeginPaint(hwnd, &Ps);
        SelectObject(hDC, BrushGreen);
        Polygon(hDC, Pt, 6);
        SelectObject(hDC, BrushRed);
        Polygon(hDC, Pt2, 6);

        DeleteObject(BrushGreen);
        DeleteObject(BrushRed);
        DeleteObject(BrushYellow);
        DeleteObject(BrushBlue);

        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;
}

I would appreciate it if anybody could help me out with this, as I haven't been able to find much information elsewhere.
Thanks in advance.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.