CheckMenuItem(hMenu, wSelection, MF_UNCHECKED);




/** Abraão gerou Isaque que gerou Jacó que é Israel */

#include <windows.h>
#include <commctrl.h>
#include "resource.h"

#define NUMBUTTONS  12

LRESULT CALLBACK ProcJan(HWND, UINT, WPARAM, LPARAM);
void InitToolbar(void);

HBRUSH   Brush[6];
TBBUTTON tbButtons[NUMBUTTONS];
HWND     tbwnd;
int      ToolBarActive;
UINT     wSelection;
HMENU    hMenu;

TCHAR szNA[] = "Menu";

int WINAPI WinMain(HINSTANCE hI, HINSTANCE hCA, LPSTR szLC, int iCS) {
    HWND     hjan;
    MSG      msg;
    WNDCLASS classejan;
    HACCEL   hAccel;
    int      i;

    classejan.style         = CS_HREDRAW | CS_VREDRAW;
    classejan.lpfnWndProc   = ProcJan;
    classejan.cbClsExtra    = 0;
    classejan.cbWndExtra    = 0;
    classejan.hInstance     = hI;
    classejan.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    classejan.hCursor       = LoadCursor(NULL, IDC_ARROW);
    classejan.hbrBackground = GetStockObject(WHITE_BRUSH);
    classejan.lpszMenuName  = szNA;
    classejan.lpszClassName = szNA;

    if(!RegisterClass(&classejan)) {
        return 0;
    }

    hjan = CreateWindow(
        szNA, TEXT("Menu"), WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        HWND_DESKTOP, NULL, hI, NULL
    );
    hAccel = LoadAccelerators(hI, szNA);

    InitToolbar();
    InitCommonControls();

    tbwnd = CreateToolbarEx(
        hjan,
        WS_VISIBLE|WS_CHILD|WS_BORDER|TBSTYLE_TOOLTIPS,
        IDM_TOOLBAR,
        NUMBUTTONS,
        hI,
        NULL,
        tbButtons,
        NUMBUTTONS,
        0,
        0,
        16,
        16,
        sizeof(TBBUTTON)
    );

    ShowWindow(hjan, iCS);
    UpdateWindow(hjan);

    while(GetMessage(&msg, NULL, 0, 0)) {
        if(!TranslateAccelerator(hjan, hAccel, &msg)) {
            TranslateMessage(&msg);
            DispatchMessage (&msg);
            FreeConsole();
        }
    }
    for(i=0; i<6; i++) {
        DeleteObject((HGDIOBJ) Brush[i]);
    }
    return msg.wParam;
}

LRESULT CALLBACK ProcJan(HWND hjan, UINT msg, WPARAM wP, LPARAM lP) {
    HDC           hdc;
    PAINTSTRUCT   ps;
    RECT          rect;
    LPTOOLTIPTEXT TTtext;

    switch(msg) {
        case WM_CREATE:
            hMenu = GetMenu(hjan);
            Brush[0] = CreateSolidBrush(RGB(0, 0, 255));
            Brush[1] = CreateSolidBrush(RGB(255, 0, 255));
            Brush[2] = CreateSolidBrush(RGB(0, 255, 0));
            Brush[3] = CreateSolidBrush(RGB(0, 0, 0));
            Brush[4] = CreateSolidBrush(RGB(255,255,255));
            Brush[5] = CreateSolidBrush(RGB(255, 0, 0));
            return 0;
        case WM_NOTIFY:
            TTtext = (LPTOOLTIPTEXT) lP;
            if(TTtext->hdr.code==TTN_NEEDTEXT) {
                switch(TTtext->hdr.idFrom) {
                    case IDM_AZUL:
                        TTtext->lpszText="Azul";
                        break;
                    case IDM_CIANO:
                        TTtext->lpszText="Ciano";
                        break;
                    case IDM_VERDE:
                        TTtext->lpszText="Verde";
                        break;
                    case IDM_PRETO:
                        TTtext->lpszText="Preto";
                        break;
                    case IDM_BRANCO:
                        TTtext->lpszText="Branco";
                        break;
                    case IDM_VERMELHO:
                        TTtext->lpszText="Vermelho";
                        break;
                    case IDM_MSG1:
                        TTtext->lpszText="Mensagem 1";
                        break;
                    case IDM_MSG2:
                        TTtext->lpszText="Mensagem 2";
                        break;
                    case IDM_MSG3:
                        TTtext->lpszText="Mensagem 3";
                        break;
                    case IDM_SAIR:
                        TTtext->lpszText="Sair";
                        break;
                }
            }
            return 0;
        case WM_COMMAND:
            switch(LOWORD(wP)) {
                case IDM_AZUL:
                case IDM_CIANO:
                case IDM_VERDE:
                case IDM_PRETO:
                case IDM_BRANCO:
                case IDM_VERMELHO:
                    hMenu      = GetMenu(hjan);
                    CheckMenuItem(hMenu, wSelection, MF_UNCHECKED);
                    wSelection = LOWORD(wP);
                    CheckMenuItem(hMenu, wSelection, MF_CHECKED);
                    InvalidateRect(hjan, NULL, 0);
                    break;
                case IDM_MSG1:
                    MessageBox(
                        hjan,
                        "Mensagem 1",
                        szNA,
                        MB_OK|MB_ICONEXCLAMATION
                    );
                    break;
                case IDM_MSG2:
                    MessageBox(
                        hjan,
                        "Mensagem 2",
                        szNA,
                        MB_OK|MB_ICONEXCLAMATION
                    );
                    break;
                case IDM_MSG3:
                    MessageBox(
                        hjan,
                        "Mensagem 3",
                        szNA,
                        MB_OK|MB_ICONEXCLAMATION
                    );
                    break;
                case IDM_SAIR:
                    if(IDOK==MessageBox(hjan,"Sair",szNA,MB_OK|MB_OKCANCEL|0x30)) {
                        SendMessage(hjan, WM_CLOSE, 0, 0L);
                    }
                    break;
                case IDM_MOSTRARB:
                    ToolBarActive = 1;
                    ShowWindow(tbwnd, SW_RESTORE);
                    InvalidateRect(hjan, NULL, 1);
                    break;
                case IDM_ESCB:
                    ToolBarActive=0;
                    ShowWindow(tbwnd, SW_HIDE);
                    InvalidateRect(hjan, NULL, 1);
                    break;
                }
                return 0;
            case WM_PAINT:
                hdc = BeginPaint(hjan, &ps);
                GetClientRect(hjan, &rect);
                FillRect(hdc, &rect, Brush[wSelection]);
                EndPaint(hjan, &ps);
                return 0;
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            case WM_CLOSE:
                DestroyWindow(hjan);
                return 0;
    }
    return DefWindowProc(hjan, msg, wP, lP);
}

void InitToolbar() {
    tbButtons[0].iBitmap  = 0;
    tbButtons[0].idCommand= IDM_AZUL;
    tbButtons[0].fsState  = TBSTATE_ENABLED;
    tbButtons[0].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[0].dwData   = 0L;
    tbButtons[0].iString  = 0;

    tbButtons[1].iBitmap  = 1;
    tbButtons[1].idCommand= IDM_CIANO;
    tbButtons[1].fsState  = TBSTATE_ENABLED;
    tbButtons[1].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[1].dwData   = 0L;
    tbButtons[1].iString  = 0;

    tbButtons[2].iBitmap  = 2;
    tbButtons[2].idCommand= IDM_VERDE;
    tbButtons[2].fsState  = TBSTATE_ENABLED;
    tbButtons[2].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[2].dwData   = 0L;
    tbButtons[2].iString  = 0;

    tbButtons[3].iBitmap  = 3;
    tbButtons[3].idCommand= IDM_PRETO;
    tbButtons[3].fsState  = TBSTATE_ENABLED;
    tbButtons[3].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[3].dwData   = 0L;
    tbButtons[3].iString  = 0;

    tbButtons[4].iBitmap  = 4;
    tbButtons[4].idCommand= IDM_BRANCO;
    tbButtons[4].fsState  = TBSTATE_ENABLED;
    tbButtons[4].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[4].dwData   = 0L;
    tbButtons[4].iString  = 0;

    tbButtons[5].iBitmap  = 5;
    tbButtons[5].idCommand= IDM_VERMELHO;
    tbButtons[5].fsState  = TBSTATE_ENABLED;
    tbButtons[5].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[5].dwData   = 0L;
    tbButtons[5].iString  = 0;

    tbButtons[6].iBitmap  = 0;
    tbButtons[6].idCommand= 0;
    tbButtons[6].fsState  = TBSTATE_ENABLED;
    tbButtons[6].fsStyle  = TBSTYLE_SEP;
    tbButtons[6].dwData   = 0L;
    tbButtons[6].iString  = 0;

    tbButtons[7].iBitmap  = 6;
    tbButtons[7].idCommand= IDM_MSG1;
    tbButtons[7].fsState  = TBSTATE_ENABLED;
    tbButtons[7].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[7].dwData   = 0L;
    tbButtons[7].iString  = 0;

    tbButtons[8].iBitmap  = 7;
    tbButtons[8].idCommand= IDM_MSG2;
    tbButtons[8].fsState  = TBSTATE_ENABLED;
    tbButtons[8].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[8].dwData   = 0L;
    tbButtons[8].iString  = 0;

    tbButtons[9].iBitmap  = 8;
    tbButtons[9].idCommand= IDM_MSG3;
    tbButtons[9].fsState  = TBSTATE_ENABLED;
    tbButtons[9].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[9].dwData   = 0L;
    tbButtons[9].iString  = 0;

    tbButtons[10].iBitmap  = 0;
    tbButtons[10].idCommand= 0;
    tbButtons[10].fsState  = TBSTATE_ENABLED;
    tbButtons[10].fsStyle  = TBSTYLE_SEP;
    tbButtons[10].dwData   = 0L;
    tbButtons[10].iString  = 0;

    tbButtons[11].iBitmap  = 9;
    tbButtons[11].idCommand= IDM_SAIR;
    tbButtons[11].fsState  = TBSTATE_ENABLED;
    tbButtons[11].fsStyle  = TBSTYLE_BUTTON;
    tbButtons[11].dwData   = 0L;
    tbButtons[11].iString  = 0;
}



/***** resource.h *****/

#define IDM_AZUL     0
#define IDM_CIANO    1
#define IDM_VERDE    2
#define IDM_PRETO    3
#define IDM_BRANCO   4
#define IDM_VERMELHO 5

#define IDM_MSG1     10
#define IDM_MSG2     11
#define IDM_MSG3     12

#define IDM_SAIR     20
#define IDM_MOSTRARB 30
#define IDM_ESCB     31

#define IDM_TOOLBAR  200

#define IDTB_BMP     300



/***** resource.rc *****/

#include "resource.h"
#include "afxres.h"

Menu MENU {
    POPUP "&Color" {
        POPUP "Mais &Cores" {
            MENUITEM "&Preto\t^P",    IDM_PRETO
            MENUITEM "&Branco\t^B",   IDM_BRANCO
            MENUITEM "&Vermelho\t^V", IDM_VERMELHO
        }
        MENUITEM "A&zul\t^Z",         IDM_AZUL
        MENUITEM "C&iano\t^A",        IDM_CIANO
        MENUITEM "Ve&rde\t^R",        IDM_VERDE
    }
    POPUP "&Mensagens" {
        MENUITEM "Mensagem &1\t^F1", IDM_MSG1
        MENUITEM "Mensagem &2\t^F2", IDM_MSG2
        MENUITEM "Mensagem &3\t^F3", IDM_MSG3
    }

    MENUITEM "&Sair ^S",       IDM_SAIR

    POPUP "&Buttons" {
        MENUITEM "&Show\t^M",   IDM_MOSTRARB
        MENUITEM SEPARATOR
        MENUITEM "&Hide\t^E",   IDM_ESCB
    }
}

Menu ACCELERATORS {
    "^Z",  IDM_AZUL
    "^A",  IDM_CIANO
    "^R",  IDM_VERDE
    "^P",  IDM_PRETO
    "^B",  IDM_BRANCO
    "^V",  IDM_VERMELHO

    VK_F1, IDM_MSG1, VIRTKEY
    VK_F2, IDM_MSG2, VIRTKEY
    VK_F3, IDM_MSG3, VIRTKEY

    "^S",  IDM_SAIR
    "^M",  IDM_MOSTRARB
    "^E",  IDM_ESCB
}

Comentários