repo: graficoMenus
#include <windows.h> #include <windowsx.h> #include <tchar.h> #include "resource.h" #define NUM_CLIENTES 3 #define LIST_SIZE 8 TCHAR* LIST_ITENS[] = { TEXT("10€"), TEXT("20€"), TEXT("40€"), TEXT("60€"), TEXT("80€"), TEXT("100€"), TEXT("150€"), TEXT("200€") }; LRESULT CALLBACK TrataEventos(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK TrataEventosLogin(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK TrataEventosLevantar(HWND, UINT, WPARAM, LPARAM); TCHAR szProgName[] = TEXT("Ficha8"); typedef struct { unsigned int ID; TCHAR username[16]; TCHAR password[16]; unsigned int saldo; } cliente; typedef struct { unsigned int tipo; // 1 = depósito, 2 = levantamento unsigned int quantia; unsigned int ID; } operacao; typedef struct { cliente clientes[NUM_CLIENTES]; operacao historico[200]; unsigned int numOperacoes; } dados; int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd; MSG lpMsg; WNDCLASSEX wcApp; HANDLE hAccel; dados dadosPartilhados; wcApp.cbSize = sizeof(WNDCLASSEX); wcApp.hInstance = hInst; wcApp.lpszClassName = szProgName; wcApp.lpfnWndProc = TrataEventos; wcApp.style = CS_HREDRAW | CS_VREDRAW; wcApp.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_APP)); wcApp.hIconSm = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ICON_APP)); wcApp.hCursor = LoadCursor(hInst, MAKEINTRESOURCE(IDI_ICON_APP)); wcApp.lpszMenuName = MAKEINTRESOURCE(IDR_MENU_PRINCIPAL); wcApp.cbClsExtra = sizeof(dados); wcApp.cbWndExtra = 0; wcApp.hbrBackground = CreateSolidBrush(RGB(220, 220, 220)); if (!RegisterClassEx(&wcApp)) return(0); hWnd = CreateWindow( szProgName, TEXT("SO2 - Ficha 8"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 150, (HWND)HWND_DESKTOP, (HMENU)NULL, (HINSTANCE)hInst, 0); dadosPartilhados.numOperacoes = 5; // Apenas para testar... LONG_PTR x = SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)&dadosPartilhados); ShowWindow(hWnd, nCmdShow); hAccel = LoadAccelerators(NULL, MAKEINTRESOURCE(IDR_ACCELERATOR)); while (GetMessage(&lpMsg, NULL, 0, 0)) { if (!TranslateAccelerator(hWnd, hAccel, &lpMsg)) { TranslateMessage(&lpMsg); DispatchMessage(&lpMsg); } } return((int)lpMsg.wParam); } LRESULT CALLBACK TrataEventos(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam) { TCHAR str1[512], str2[512]; dados* dadosPartilhados; dadosPartilhados = (dados*)GetWindowLongPtr(hWnd, GWLP_USERDATA); switch (messg) { case WM_CREATE: EnableMenuItem(GetMenu(hWnd), ID_CONSULTA, MF_DISABLED | MF_GRAYED); EnableMenuItem(GetMenu(hWnd), ID_LEVANTAMENTO, MF_DISABLED | MF_GRAYED); break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_LOGIN: DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG_LOGIN), hWnd, TrataEventosLogin); EnableMenuItem(GetMenu(hWnd), ID_CONSULTA, MF_ENABLED); EnableMenuItem(GetMenu(hWnd), ID_LEVANTAMENTO, MF_ENABLED); break; case ID_CONSULTA: case ID_ACCELERATOR_CONSULTA: LoadString(NULL, IDS_STR_CONSULTA, str1, 512); _stprintf_s(str2, 512, TEXT("%s (%d)"), str1, dadosPartilhados->numOperacoes); MessageBox(hWnd, str2, TEXT("String Table"), MB_OK | MB_ICONINFORMATION); break; case ID_ACCELERATOR_LEVANTAMENTO: case ID_LEVANTAMENTO: DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG_LEVANTAMENTO), NULL, TrataEventosLevantar); break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, messg, wParam, lParam); break; } return(0); } LRESULT CALLBACK TrataEventosLogin(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam) { TCHAR username[16]; switch (messg) { case WM_COMMAND: if (LOWORD(wParam) == IDOK) { GetDlgItemText(hWnd, IDC_EDIT_LOGIN, username, 16); MessageBox(hWnd, username, TEXT("Username"), MB_OK | MB_ICONINFORMATION); } else if (LOWORD(wParam) == IDCANCEL) { EndDialog(hWnd, 0); return TRUE; } break; case WM_CLOSE: EndDialog(hWnd, 0); return TRUE; } return FALSE; } LRESULT CALLBACK TrataEventosLevantar(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam) { int i; switch (messg) { case WM_INITDIALOG: HWND hwndList = GetDlgItem(hWnd, IDC_LIST_MONTANTES); SendMessage(hwndList, LB_RESETCONTENT, 0, 0); for (i = 0; i < LIST_SIZE; i++) SendMessage(hwndList, LB_ADDSTRING, 0, (LPARAM)LIST_ITENS[i]); break; case WM_COMMAND: if (LOWORD(wParam) == IDC_LIST_MONTANTES) { switch (HIWORD(wParam)) { case LBN_DBLCLK: HWND hwndList = GetDlgItem(hWnd, IDC_LIST_MONTANTES); i = (int)SendMessage(hwndList, LB_GETCURSEL, 0, 0); MessageBox(hWnd, LIST_ITENS[i], TEXT("ListBox"), MB_OK | MB_ICONINFORMATION); break; } } break; case WM_CLOSE: EndDialog(hWnd, 0); return TRUE; } return FALSE; }
e no resource.h
#define IDI_ICON_APP 101 #define IDR_MENU_PRINCIPAL 102 #define IDR_ACCELERATOR 107 #define IDD_DIALOG1 108 #define IDC_LOGIN 1001 #define IDC_PASSWORD 1002 #define ID_CANCEL 1003 #define IDC_LIST_MONTANTES 1004 #define IDC_EDIT1 1006 #define IDS_STR_CONSULTA 1006 #define ID_OPERA40001 40001 #define ID_OPERA40002 40002 #define ID_LOGIN 40003 #define IDD_DIALOG_LOGIN 40003 #define ID_CONSULTA 40004 #define ID_LEVANTAMENTO 40005 #define IDD_DIALOG_LEVANTAMENTO 40005 #define ID_ACCELERATOR_CONSULTA 40006 #define ID_ACCELERATOR_LEVANTAMENTO 40007 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 110 #define _APS_NEXT_COMMAND_VALUE 40009 #define _APS_NEXT_CONTROL_VALUE 1007 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif
0 thoughts on “repo: graficoMenus”