Linguagem C - DrawFocusRect(pdis->hDC, &pdis->rcItem);




/******** main.c ********/

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

#define ID_SMALLER 1
#define ID_LARGER  2
#define BTN_LARGURA (8 * cxChar)
#define BTN_ALTURA  (4 * cyChar)

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInst;

int WINAPI WinMain(HINSTANCE hI,HINSTANCE hPI,PSTR szCL,int iCS) {
    static TCHAR szAppName[] = TEXT("Tamanho da Tela");
    MSG      msg;
    HWND     hwnd;
    WNDCLASS wndclass;
    hInst = hI;

    wndclass.style         = CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc   = WndProc;
    wndclass.cbClsExtra    = 0;
    wndclass.cbWndExtra    = 0;
    wndclass.hInstance     = hI;
    wndclass.hIcon         = LoadIcon(hI, IDI_ICON);
    wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    wndclass.lpszMenuName  = szAppName;
    wndclass.lpszClassName = szAppName;

    if(!RegisterClass(&wndclass)) {
        MessageBox(NULL, TEXT("Erro!"), szAppName, MB_ICONERROR);
        return 0;
    }

    hwnd = CreateWindow(
        szAppName, TEXT("Tamanho da Tela"), WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, hI, NULL
    );

    ShowWindow(hwnd, iCS);
    UpdateWindow(hwnd);

    while(GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        FreeConsole();
    }
}

void Triangle(HDC hdc, POINT pt[]) {
    SelectObject(hdc, GetStockObject(BLACK_BRUSH));
    Polygon(hdc, pt, 3);
    SelectObject(hdc, GetStockObject(WHITE_BRUSH));
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wP, LPARAM lP) {
    static HWND Smaller, Larger;
    static int  cxClient, cyClient, cxChar, cyChar;
    int         cx, cy;
    LPDRAWITEMSTRUCT pdis;
    POINT       pt[3];
    RECT        rc;

    static HBITMAP hBitmap;
    static int     cxC, cyC, cxS, cyS;
    BITMAP         bitmap;
    HDC            hdc, hdcMem;
    HINSTANCE      hInstance;
    int            h, v;
    PAINTSTRUCT    ps;

    switch(msg) {
        case WM_CREATE:
            cxChar = LOWORD(GetDialogBaseUnits());
            cyChar = HIWORD(GetDialogBaseUnits());

            Smaller = CreateWindow(
                TEXT("button"), TEXT(""), WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,
                0, 0, BTN_LARGURA, BTN_ALTURA,
                hwnd, (HMENU) ID_SMALLER, hInst, NULL
            );

            Larger = CreateWindow(
                TEXT("button"),TEXT(""),WS_CHILD|WS_VISIBLE|BS_OWNERDRAW,
                0, 0, BTN_LARGURA, BTN_ALTURA,
                hwnd, (HMENU) ID_LARGER, hInst, NULL
            );

            hInstance = ((LPCREATESTRUCT) lP)->hInstance;
            hBitmap = LoadBitmap(hInstance, IMAGEM);
            GetObject(hBitmap, sizeof(BITMAP), &bitmap);
            cxS = bitmap.bmWidth;
            cyS = bitmap.bmHeight;
            return 0;
        case WM_SIZE:
            cxClient = LOWORD(lP);
            cyClient = HIWORD(lP);
            MoveWindow(
                Smaller,
                cxClient / 2 - 3 * BTN_LARGURA / 2,
                cyClient / 2 - BTN_ALTURA / 2,
                BTN_LARGURA, BTN_ALTURA, TRUE
            );

            MoveWindow(
                Larger,
                cxClient / 2 + BTN_LARGURA / 2,
                cyClient / 2 - BTN_ALTURA / 2,
                BTN_LARGURA, BTN_ALTURA, TRUE
            );

            cxC = LOWORD(lP);
            cyC = HIWORD(lP);
            return 0;
        case WM_COMMAND:
            GetWindowRect(hwnd, &rc);
            switch(wP) {
                case ID_SMALLER:
                    rc.left   += cxClient/20;
                    rc.right  -= cxClient/20;
                    rc.top    += cyClient/20;
                    rc.bottom -= cyClient/20;
                    break;
                case ID_LARGER:
                    rc.left   -= cxClient/20;
                    rc.right  += cxClient/20;
                    rc.top    -= cyClient/20;
                    rc.bottom += cyClient/20;
                    break;
            }
            MoveWindow(
                hwnd,
                rc.left,
                rc.top,
                rc.right - rc.left,
                rc.bottom - rc.top,
                TRUE
            );
            return 0;
        case WM_DRAWITEM:
            pdis = (LPDRAWITEMSTRUCT) lP;
            FillRect(
                pdis->hDC,
                &pdis->rcItem,
                (HBRUSH) GetStockObject(WHITE_BRUSH)
            );
            FrameRect(
                pdis->hDC,
                &pdis->rcItem,
                (HBRUSH) GetStockObject(BLACK_BRUSH)
            );
            cx = pdis->rcItem.right  - pdis->rcItem.left;
            cy = pdis->rcItem.bottom - pdis->rcItem.top;
            switch(pdis->CtlID) {
                case ID_SMALLER:
                    pt[0].x = 3*cx/8; pt[0].y = 1*cy/8;
                    pt[1].x = 5*cx/8; pt[1].y = 1*cy/8;
                    pt[2].x = 4*cx/8; pt[2].y = 3*cy/8;
                    Triangle(pdis->hDC, pt);
                    pt[0].x = 7 * cx / 8;  pt[0].y = 3 * cy / 8;
                    pt[1].x = 7 * cx / 8;  pt[1].y = 5 * cy / 8;
                    pt[2].x = 5 * cx / 8;  pt[2].y = 4 * cy / 8;
                    Triangle (pdis->hDC, pt);
                    pt[0].x = 5 * cx / 8;  pt[0].y = 7 * cy / 8;
                    pt[1].x = 3 * cx / 8;  pt[1].y = 7 * cy / 8;
                    pt[2].x = 4 * cx / 8;  pt[2].y = 5 * cy / 8;
                    Triangle (pdis->hDC, pt);
                    pt[0].x = 1 * cx / 8;  pt[0].y = 5 * cy / 8;
                    pt[1].x = 1 * cx / 8;  pt[1].y = 3 * cy / 8;
                    pt[2].x = 3 * cx / 8;  pt[2].y = 4 * cy / 8;
                    Triangle (pdis->hDC, pt);
                    break ;
                case ID_LARGER:
                    pt[0].x = 5 * cx / 8;  pt[0].y = 3 * cy / 8;
                    pt[1].x = 3 * cx / 8;  pt[1].y = 3 * cy / 8;
                    pt[2].x = 4 * cx / 8;  pt[2].y = 1 * cy / 8;
                    Triangle (pdis->hDC, pt);
                    pt[0].x = 5 * cx / 8;  pt[0].y = 5 * cy / 8;
                    pt[1].x = 5 * cx / 8;  pt[1].y = 3 * cy / 8;
                    pt[2].x = 7 * cx / 8;  pt[2].y = 4 * cy / 8;
                    Triangle (pdis->hDC, pt);
                    pt[0].x = 3 * cx / 8;  pt[0].y = 5 * cy / 8;
                    pt[1].x = 5 * cx / 8;  pt[1].y = 5 * cy / 8;
                    pt[2].x = 4 * cx / 8;  pt[2].y = 7 * cy / 8;
                    Triangle (pdis->hDC, pt);
                    pt[0].x = 3 * cx / 8;  pt[0].y = 3 * cy / 8;
                    pt[1].x = 3 * cx / 8;  pt[1].y = 5 * cy / 8;
                    pt[2].x = 1 * cx / 8;  pt[2].y = 4 * cy / 8;
                    Triangle (pdis->hDC, pt);
                    break;
            }
            if(pdis->itemState & ODS_SELECTED) {
                InvertRect(pdis->hDC, &pdis->rcItem);
            }
            if(pdis->itemState & ODS_FOCUS) {
                pdis->rcItem.left   += cx / 16;
                pdis->rcItem.top    += cy / 16;
                pdis->rcItem.right  -= cx / 16;
                pdis->rcItem.bottom -= cy / 16;
                DrawFocusRect(pdis->hDC, &pdis->rcItem);
            }
            return 0;
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            hdcMem = CreateCompatibleDC(hdc);
            SelectObject(hdcMem, hBitmap);
            for(v = 0; v<cyC; v+=cyS) {
                for(h = 0; h<cxC; h+=cxS) {
                    BitBlt(hdc,h,v,cxS,cyS,hdcMem,0,0,SRCCOPY);
                }
            }
            DeleteDC(hdcMem);
            EndPaint(hwnd, &ps);
            return 0;
        case WM_DESTROY:
            DeleteObject(hBitmap);
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, msg, wP, lP);
}



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

#define IMAGEM   444
#define IDI_ICON 445



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

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

IMAGEM BITMAP DISCARDABLE "img8.bmp"
IDI_ICON ICON             "harpa.ico"

Comentários