Advertisement
Sooldierr

WinAPI - Zliczanie liter w tekście

Nov 30th, 2016
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <Windows.h>
  2. #include <stdio.h>
  3.  
  4.  
  5. enum { LITERA1, LITERA2, TEKST };
  6.  
  7.  
  8.  
  9. LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  10. {
  11.     static HWND  IloscLiter1, IloscLiter2, Litera1, Litera2, tekst;
  12.     switch (msg)
  13.     {
  14.         case WM_CREATE:
  15.         {
  16.             HINSTANCE &hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
  17.             Litera1 = CreateWindowEx(0, TEXT("EDIT"), TEXT(""), WS_CHILD | WS_VISIBLE | WS_BORDER,
  18.                 110, 150, 150, 20, hwnd, (HMENU)0, hInstance, NULL);
  19.             Litera2 = CreateWindowEx(0, TEXT("EDIT"), TEXT(""), WS_CHILD | WS_VISIBLE | WS_BORDER,
  20.                 110, 150, 150, 20, hwnd, (HMENU)1, hInstance, NULL);
  21.             tekst = CreateWindowEx(0, TEXT("EDIT"), TEXT("Ala ma kota"), WS_CHILD | WS_VISIBLE | WS_BORDER,
  22.                 110, 150, 150, 20, hwnd, (HMENU)2, hInstance, NULL);
  23.  
  24.             IloscLiter1 = CreateWindowEx(0, TEXT("STATIC"), TEXT("0"), WS_CHILD | WS_VISIBLE | WS_BORDER,
  25.                 10, 150, 150, 20, hwnd, (HMENU)3, hInstance, NULL);
  26.             IloscLiter2 = CreateWindowEx(0, TEXT("STATIC"), TEXT("0"), WS_CHILD | WS_VISIBLE | WS_BORDER,
  27.                 110, 150, 150, 20, hwnd, (HMENU)4, hInstance, NULL);
  28.  
  29.             SendMessage(Litera1, EM_LIMITTEXT, 1, NULL);    // ustalamy limit wprowadzanego tekstu na jeden znak
  30.             SendMessage(Litera2, EM_LIMITTEXT, 1, NULL);
  31.         }break;
  32.  
  33.         case WM_COMMAND:
  34.         {
  35.             static TCHAR znak1[2], znak2[2], _tekst[128];
  36.             int liczbaZnakow1 = 0, liczbaZnakow2 = 0;
  37.             TCHAR ileZnakow1[4], ileZnakow2[4];
  38.             GetWindowText(tekst, _tekst, 127);
  39.             switch (LOWORD(wParam))//Uzyskanie ID klikniętej kontrolki.
  40.             {
  41.                
  42.                 case LITERA1://Zaznaczenie pierwszego, odznaczenie drugiego radiobuttona:      
  43.                 {
  44.  
  45.                     GetWindowText(Litera1, znak1, 2);
  46.                     znak1[1] = 0;
  47.  
  48.                 }break;
  49.                 case LITERA2://Zaznaczenie pierwszego, odznaczenie drugiego radiobuttona:      
  50.                 {
  51.  
  52.                     GetWindowText(Litera2, znak2, 2);
  53.                     znak2[1] = 0;
  54.  
  55.                 }break;
  56.  
  57.                 case TEKST://Zaznaczenie pierwszego, odznaczenie drugiego radiobuttona:      
  58.                 {
  59.  
  60.                     GetWindowText(tekst, _tekst, 127);
  61.                     _tekst[127] = 0;
  62.                 }break;
  63.             };
  64.  
  65.             for (int i = 0; i < wcslen(_tekst); i++)
  66.             {
  67.                 if (_tekst[i] == znak1[0])
  68.                 {
  69.                     liczbaZnakow1++;
  70.                 }
  71.                 if (_tekst[i] == znak2[0])
  72.                 {
  73.                     liczbaZnakow2++;
  74.                 }
  75.             }
  76.             wsprintf(ileZnakow1, TEXT("%d"), liczbaZnakow1);
  77.             wsprintf(ileZnakow2, TEXT("%d"), liczbaZnakow2);
  78.  
  79.             SetWindowText(IloscLiter1, ileZnakow1);
  80.             SetWindowText(IloscLiter2, ileZnakow2);
  81.  
  82.         }break;
  83.  
  84.         case WM_SIZE:
  85.         {
  86.             RECT windowRect;
  87.             GetClientRect(hwnd, &windowRect);
  88.             int static_x = (windowRect.right -100) / 2;
  89.             int static_y = (windowRect.bottom -100) / 2;
  90.             int edit_x = static_x + 100;
  91.             int edit_y = static_y;
  92.  
  93.             //ustawiamy kontrolki w okienku
  94.             MoveWindow(IloscLiter1, static_x, static_y, 70, 20, TRUE);
  95.             MoveWindow(IloscLiter2, static_x, static_y+30, 70, 20, TRUE);
  96.             MoveWindow(Litera1, edit_x, static_y, 70, 20, TRUE);
  97.             MoveWindow(Litera2, edit_x, static_y + 30, 70, 20, TRUE);
  98.             MoveWindow(tekst, edit_x - 100, static_y+60, 170, 20, TRUE);
  99.    
  100.         }break;
  101.  
  102.         case WM_CLOSE:
  103.             if (MessageBox(NULL, TEXT("Czy na pewno chcesz zamknąć okno?"), TEXT("Pytanie"), MB_ICONQUESTION | MB_OKCANCEL) == IDOK)
  104.                 DestroyWindow(hwnd);
  105.             break;
  106.  
  107.         case WM_DESTROY:
  108.             PostQuitMessage(0);
  109.             break;
  110.  
  111.         case WM_GETMINMAXINFO://Ustawianie minimalnego rozmiaru okna:
  112.             ((MINMAXINFO *)lParam)->ptMinTrackSize.x = 300;
  113.             ((MINMAXINFO *)lParam)->ptMinTrackSize.y = 200;
  114.             break;
  115.  
  116.         default:
  117.             return DefWindowProc(hwnd, msg, wParam, lParam);
  118.     }
  119.     return 0;
  120. }
  121.  
  122. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR ilCmdLine, int nCmdShow)
  123. {
  124.     WNDCLASSEX window;
  125.     HWND hwnd = NULL;
  126.     MSG msg;
  127.     TCHAR ClassName[] = TEXT("KlasaOkna");
  128.     TCHAR WindowTitle[] = TEXT("Przeliczanie");
  129.  
  130.     window.cbClsExtra = NULL;
  131.     window.cbSize = sizeof(WNDCLASSEX);
  132.     window.cbWndExtra = NULL;
  133.     window.hbrBackground = (HBRUSH)(COLOR_WINDOW);
  134.     window.hCursor = LoadCursor(NULL, IDC_ARROW);
  135.     window.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  136.     window.hIconSm = NULL;
  137.     window.hInstance = hInstance;
  138.     window.lpfnWndProc = WndProc;
  139.     window.lpszClassName = ClassName;
  140.     window.lpszMenuName = 0;
  141.     window.style = CS_VREDRAW | CS_HREDRAW;
  142.  
  143.     RegisterClassEx(&window);
  144.  
  145.     hwnd = CreateWindowEx(WS_EX_WINDOWEDGE, ClassName, WindowTitle,
  146.         WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT,
  147.         400, 400, NULL, NULL, hInstance, NULL);
  148.  
  149.     ShowWindow(hwnd, nCmdShow);
  150.     UpdateWindow(hwnd);
  151.  
  152.     while (GetMessage(&msg, NULL, 0, 0))
  153.     {
  154.         TranslateMessage(&msg);
  155.         DispatchMessage(&msg);
  156.     }
  157.     UnregisterClass(ClassName, hInstance);
  158.     return msg.wParam;
  159. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement