/******** 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
Postar um comentário