
/**
Mas o que nos confirma convosco em
Cristo, e que nos ungiu, é Deus,
2 Coríntios 1:21
*/
#include <windows.h>
#include "resource.h"
#define IDM_SAIR 1
#define IDM_E12 2
#define IDM_E13 3
#define IDM_E14 4
#define IDM_E15 5
#define IDM_E16 6
#define IDM_E17 7
#define IDM_E18 8
#define IDM_E19 9
LRESULT CALLBACK ProcJan(HWND, UINT, WPARAM, LPARAM);
HBRUSH Brush[6];
HCURSOR hCursor;
char *caractere[] = {
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a",
"b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",
"m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z", "Home", "PgUp", "PgDown", "End", "Sup",
"Sdown", "Sesq", "Sdir", "Ret"
};
char szNA[] = "Teclado";
char buf[30];
char buf1[100] = "\0";
char buf2[500] = "\0";
int cont = 0;
int contador[46];
int barra = 0;
int alturabarra = 0;
BOOL cores = TRUE;
int cont1 = 0;
int WINAPI WinMain(HINSTANCE hC, HINSTANCE hCA, LPSTR szLC, int iCS) {
HWND hjan;
MSG msg;
WNDCLASS classejan;
int i;
HACCEL hAccel;
classejan.style = CS_HREDRAW | CS_VREDRAW;
classejan.lpfnWndProc = ProcJan;
classejan.cbClsExtra = 0;
classejan.cbWndExtra = 0;
classejan.hInstance = hC;
classejan.hIcon = LoadIcon(hC, IDI_ICON);
classejan.hCursor = LoadCursor(hC, szNA);
classejan.hbrBackground = GetSysColorBrush(WHITE_BRUSH);
classejan.lpszMenuName = szNA;
classejan.lpszClassName = szNA;
if(!RegisterClass(&classejan)) {
return 0;
}
hjan = CreateWindow(
szNA, "Teclado:", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
HWND_DESKTOP, NULL, hC, NULL
);
hAccel = LoadAccelerators(hC, szNA);
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 iMsg, WPARAM wP, LPARAM lParam) {
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
POINT lpPt;
float x, y;
int i, j;
switch(iMsg) {
case WM_CREATE:
Brush[0] = CreateSolidBrush(RGB(255, 0, 0));
Brush[1] = CreateSolidBrush(RGB(127, 127, 127));
Brush[2] = CreateSolidBrush(RGB(255, 255, 0));
Brush[3] = CreateSolidBrush(RGB(0, 0, 255));
Brush[4] = CreateSolidBrush(RGB(0, 255, 0));
Brush[5] = CreateSolidBrush(RGB(255, 175, 0));
for(i=0; i<100; i++) contador[i] = 0;
return 0;
case WM_COMMAND:
switch(LOWORD(wP)) {
case IDM_SAIR:
if(IDOK==MessageBox(hjan,"Deseja fechar?",szNA,MB_OK|0x30)) {
SendMessage(hjan, WM_CLOSE, 0, 0L);
}
break;
case IDM_E12:
SendMessage(hjan, WM_KEYDOWN, VK_ESCAPE, 1L);
break;
case IDM_E13:
SendMessage(hjan, WM_KEYDOWN, VK_F12, 1L);
break;
case IDM_E14:
SendMessage(hjan, WM_KEYDOWN, VK_RIGHT, 1L);
break;
case IDM_E15:
SendMessage(hjan, WM_KEYDOWN, VK_LEFT, 1L);
break;
case IDM_E16:
SendMessage(hjan, WM_KEYDOWN, VK_UP, 1L);
break;
case IDM_E17:
SendMessage(hjan, WM_KEYDOWN, VK_DOWN, 1L);
break;
case IDM_E18:
cores = TRUE;
break;
case IDM_E19:
cores = FALSE;
break;
}
return 0;
case WM_KEYDOWN:
hdc = GetDC(hjan);
GetClientRect(hjan, &rect);
switch(wP) {
case VK_SPACE:
SetRect(
&rect,
rect.right*0.05,
rect.bottom*0.68,
rect.right*0.95,
rect.bottom*0.8
);
contador[36]++;
break;
case VK_HOME:
SetRect(
&rect,
rect.right*(0.05+6.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+7.0*0.9/15.0),
rect.bottom*0.68
);
contador[37]++;
break;
case VK_PRIOR:
SetRect(
&rect,
rect.right*(0.05+7.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+8.0*0.9/15.0),
rect.bottom*0.68
);
contador[38]++;
break;
case VK_NEXT:
SetRect(
&rect,
rect.right*(0.05+8.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+9.0*0.9/15.0),
rect.bottom*0.68
);
contador[39]++;
break;
case VK_END:
SetRect(
&rect,
rect.right*(0.05+9.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+11.0*0.9/15.0),
rect.bottom*0.68
);
contador[40]++;
break;
case VK_UP:
SetRect(
&rect,
rect.right*(0.05+10.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+11.0*0.9/15.0),
rect.bottom*0.68
);
contador[41]++;
GetClientRect(hjan, &rect);
if(alturabarra<rect.bottom)
alturabarra++;
InvalidateRect(hjan, NULL, TRUE);
break;
case VK_DOWN:
SetRect(
&rect,
rect.right*(0.05+11.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+12.0*0.9/15.0),
rect.bottom*0.68
);
contador[42]++;
if(alturabarra>0)
alturabarra--;
InvalidateRect(hjan, NULL, TRUE);
break;
case VK_LEFT:
SetRect(
&rect,
rect.right*(0.05+12.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+13.0*0.9/15.0),
rect.bottom*0.68
);
contador[43]++;
if(barra>0) {
barra--;
}
InvalidateRect(hjan, NULL, TRUE);
break;
case VK_RIGHT:
SetRect(
&rect,
rect.right*(0.05+13.0*0.9/15.0),
rect.bottom*0.52,
rect.right*(0.05+14.0*0.9/15.0),
rect.bottom*0.68
);
contador[44]++;
GetClientRect(hjan, &rect);
if(barra<rect.right)
barra++;
InvalidateRect(hjan, NULL, TRUE);
break;
case VK_RETURN:
SetRect(
&rect,
rect.right*(0.05+14.0*0.9/15.0),
rect.bottom*0.52,
rect.right*0.95,
rect.bottom*0.68
);
contador[45]++;
break;
case VK_ESCAPE:
MessageBox(
hjan,
buf1,
"Sequência caracteres Pressionados!",
MB_OK
);
InvalidateRect(hjan, NULL, TRUE);
break;
case VK_F12:
sprintf(
buf2,
"Espaço - %d, Home - %d, PageUp - %d, PageDown \
- %d, End - %d, Seta Acima - %d, Seta Abaixo - %d, \
Seta Esquerda - %d, Seta a Direita - %d, Return - %d",
contador[36],
contador[37],
contador[38],
contador[39],
contador[40],
contador[41],
contador[42],
contador[43],
contador[44],
contador[45]
);
for(i=0; i<36; i++) {
sprintf(buf, "%c", caractere[i][0]);
strcat(buf2, buf);
sprintf(buf, "%d", caractere[i]);
strcat(buf2, buf);
}
MessageBox(
hjan,
buf2,
"Número de vezes que os caracteres foram pressionados!",
MB_OK
);
InvalidateRect(hjan, NULL, TRUE);
break;
}
FillRect(hdc, &rect, Brush[2+3*cores]);
ReleaseDC(hjan, hdc);
cont1++;
return 0;
case WM_KEYUP:
sprintf(buf, "%d", cont1);
MessageBox(
hjan,
buf,
"Tecla Pressionada",
MB_OK
);
cont1 = 0;
InvalidateRect(hjan, NULL, 1);
return 0;
case WM_CHAR:
switch(wP) {
case '\r':
case '\ ':
break;
default:
sprintf(
buf,
"A tecla pressionada foi %c",
(char) wP
);
InvalidateRect(hjan, NULL, 0);
MessageBox(
hjan,
buf,
"Tecla Pressionada",
MB_OK
);
if(isdigit((char) wP)) {
contador[wP-48]++;
}
else {
contador[wP-87]++;
}
sprintf(buf, "%c", (char)wP);
strcat(buf1, buf);
cont++;
if(cont==100) {
cont=0;
strcpy(buf1, " ");
}
InvalidateRect(hjan, NULL, 1);
break;
}
return 0;
case WM_PAINT:
hdc = BeginPaint(hjan, &ps);
GetClientRect(hjan, &rect);
FillRect(hdc, &rect, Brush[3*cores]);
for(i=0; i<barra; i++) {
MoveToEx(hdc, i, rect.bottom, &lpPt);
LineTo(hdc, i, rect.bottom - alturabarra);
}
SetRect(
&rect,
rect.right*0.05,
rect.bottom*0.2,
rect.right*0.95,
rect.bottom*0.8
);
FillRect(hdc, &rect, Brush[1+3*cores]);
if(cores) {
SetBkColor(hdc, RGB(0, 255, 0));
}
else {
SetBkColor(hdc, RGB(127, 127,127));
}
for(j=0; j<3; j++) {
for(i=0; i<15; i++) {
x = i*0.95/15;
y = 0.2*j;
TextOut(
hdc,
rect.right*(0.05+x)+3,
rect.bottom*(0.25+y)+15,
caractere[i+15*j],
strlen(caractere[i+15*j])
);
}
}
for(i=0; i<4; i++) {
y = 0.2*i;
MoveToEx(hdc, rect.left, rect.bottom*(0.25+y), &lpPt);
LineTo(hdc, rect.right, rect.bottom*(0.25+y));
}
for(i=0; i<16; i++) {
x = i*0.95/15;
MoveToEx(
hdc,
rect.right*(0.05+x),
rect.bottom*0.25,
&lpPt
);
LineTo(hdc, rect.right*(0.05+x), rect.bottom*0.85);
}
EndPaint(hjan, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CLOSE:
DestroyWindow(hjan);
return 0;
}
return DefWindowProc(hjan, iMsg, wP, lParam);
}
/********** resource.h **********/
#define IDI_ICON 20
/********** resource.rc **********/
#include "resource.h"
IDI_ICON ICON "icone.ico"
Comentários
Postar um comentário