peterzig

[PIU] Położenie Okna + Nowe Okno

Oct 18th, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.61 KB | None | 0 0
  1. Na podstawie poprzedniego programu stworzyć:
  2. Wyświetlanie Rozmiaru okna oraz Aktualnej pozycji okna. Parametry te miały być wyświetlane naraz w OKIENKU.
  3. Poza tym kliknięcie myszą na obszar okienka miało spowodować otwarcie się nowego okienka(miały już poprzednie grupy).
  4. Zamknięcie jednego miało nie powodować zamknięcia całego programu,a zamknięcie ostatniego okienka miało spowodować wyświetlenie komunikatu "KONIEC" (to też już było).
  5. #define UNICODE
  6. #include <windows.h>
  7. #include <stdio.h>
  8.  
  9. wchar_t ClassName[] = L"Klasa";
  10. int okna = 0;
  11. HWND NoweOkno;
  12. RECT R;
  13. int W,S;
  14.  
  15. static void Rysuj(const HWND okno123)
  16. {
  17.     HDC Kontekst;
  18.     PAINTSTRUCT Informacje;
  19.     static const size_t txt_size = 64;
  20.  
  21.     Kontekst = BeginPaint(okno123, &Informacje);
  22.     GetClientRect(okno123, &R);
  23.  
  24.     TCHAR txt[txt_size];   
  25.     TCHAR txt2[txt_size];
  26.  
  27.     swprintf(txt, txt_size, TEXT("Rozmiar: %i, %i"), R.right, R.bottom);
  28.     swprintf(txt2, txt_size, TEXT("Pozycja: %i x %i"), W, S);
  29.  
  30.     SetTextColor(Kontekst, RGB(0,255,0));
  31.     SetBkColor(Kontekst, RGB(17,0,25));
  32.  
  33.     TextOut(Kontekst, 5, 5, txt, wcslen(txt));
  34.     TextOut(Kontekst, 5, 50, txt2, wcslen(txt));
  35.  
  36.     EndPaint(okno123, &Informacje);
  37. }
  38.  
  39. LRESULT CALLBACK WndProc(HWND okno, UINT msg, WPARAM wParam, LPARAM lParam)
  40. {  
  41.     switch(msg)
  42.     {
  43.     case WM_PAINT:
  44.         Rysuj(okno);       
  45.         break;
  46.     case WM_CREATE:
  47.         ++okna;
  48.         UpdateWindow(okno);
  49.         break;
  50.     case WM_SIZE:
  51.         InvalidateRect(okno, &R, 1);
  52.         break;
  53.     case WM_MOVE:
  54.         InvalidateRect(okno, &R, 1);
  55.         W = LOWORD(lParam);
  56.         S = HIWORD(lParam);
  57.         break;
  58.     case WM_LBUTTONDOWN:
  59.         NoweOkno = CreateWindowEx(0, ClassName, L"Nowe Okno", WS_OVERLAPPEDWINDOW, 100, 100, 500, 300, 0, 0, GetModuleHandle(0), 0);
  60.         ShowWindow(NoweOkno, SW_SHOW);
  61.         UpdateWindow(NoweOkno);
  62.         break;
  63.     case WM_DESTROY:
  64.         if(okna==0)
  65.         {  
  66.             MessageBox(0, L"KONIEC!", L"", MB_OK);
  67.             PostQuitMessage(0);
  68.         }
  69.         break;
  70.     case WM_CLOSE:
  71.         if(MessageBox(0, L"Zamknac to okno?", L"", MB_YESNO | MB_ICONQUESTION) == IDYES)
  72.         {
  73.             okna--;
  74.             DestroyWindow(okno);
  75.         }
  76.         break;
  77.     default:
  78.         return DefWindowProc(okno, msg, wParam, lParam);
  79.         break;
  80.     }
  81.     return 0;
  82. }
  83.  
  84. static bool RejestrujKlase()
  85. {
  86.     WNDCLASSEX wc;
  87.     wc.cbClsExtra = 0;
  88.     wc.cbSize = sizeof(WNDCLASSEX);
  89.     wc.cbWndExtra = 0;
  90.     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW +1);
  91.     wc.hCursor = 0;
  92.     wc.hIcon = 0;
  93.     wc.hIconSm = 0;
  94.     wc.hInstance = GetModuleHandle(0);
  95.     wc.lpfnWndProc = WndProc;
  96.     wc.lpszClassName = ClassName;
  97.     wc.lpszMenuName = 0;
  98.     wc.style = 0;
  99.     if(!RegisterClassEx(&wc))return 0;
  100. }
  101.  
  102. static void WyrejestrujKlase()
  103. {
  104.     UnregisterClass(ClassName, GetModuleHandle(0));
  105. }
  106.  
  107.  
  108. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLIne, int nShowCmd)
  109. {
  110.     HWND okno1;
  111.     HWND okno2;
  112.     HWND okno3;
  113.     MSG msg;
  114.  
  115.     if (!RejestrujKlase())
  116.     {
  117.         MessageBox(0, TEXT("Nie udało się zarejestrować klasy okna!"), TEXT("UWAGA"), MB_ICONSTOP | MB_OK);
  118.         return 1;
  119.     }
  120.  
  121.     okno1 = CreateWindowEx(0, ClassName, L"Okno1", WS_OVERLAPPEDWINDOW, 100, 100, 500, 300, 0, 0, hInstance, 0);
  122.     ShowWindow(okno1, nShowCmd);
  123.     UpdateWindow(okno1);
  124.  
  125.     okno2 = CreateWindowEx(0, ClassName, L"Okno2", WS_OVERLAPPEDWINDOW, 100, 100, 500, 300, 0, 0, hInstance, 0);
  126.     ShowWindow(okno2, nShowCmd);
  127.     UpdateWindow(okno2);
  128.  
  129.     okno3 = CreateWindowEx(0, ClassName, L"Okno3", WS_OVERLAPPEDWINDOW, 100, 100, 500, 300, 0, 0, hInstance, 0);
  130.     ShowWindow(okno3, nShowCmd);
  131.     UpdateWindow(okno3);
  132.  
  133.  
  134.     while(GetMessage(&msg, 0, 0, 0)>0)
  135.     {
  136.         TranslateMessage(&msg);
  137.         DispatchMessage(&msg);
  138.     }
  139.     UnregisterClass(ClassName, hInstance);
  140.  
  141.  
  142.     WyrejestrujKlase();
  143.     return 0;
  144. }
Add Comment
Please, Sign In to add comment