Linguagem C - GetDialogBaseUnits - main.c


Linguagem C - GetDialogBaseUnits - 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 szCmdLine,int iCmdShow) { 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(NULL, IDI_APPLICATION); 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, iCmdShow); 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 message, WPARAM wParam, LPARAM lP) { static HWND hwndSmaller, hwndLarger; 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(message) { case WM_CREATE: cxChar = LOWORD(GetDialogBaseUnits()); cyChar = HIWORD(GetDialogBaseUnits()); hwndSmaller = CreateWindow( TEXT("button"), TEXT(""), WS_CHILD|WS_VISIBLE|BS_OWNERDRAW, 0, 0, BTN_LARGURA, BTN_ALTURA, hwnd, (HMENU) ID_SMALLER, hInst, NULL ); hwndLarger = 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( hwndSmaller, cxClient / 2 - 3 * BTN_LARGURA / 2, cyClient / 2 - BTN_ALTURA / 2, BTN_LARGURA, BTN_ALTURA, TRUE ); MoveWindow( hwndLarger, 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(wParam) { 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)); /**Draw inward and outward black triangles*/ 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, message, wParam, lP); }

Comentários