Advertisement
peterzig

[PIU] Wymiary i położenie okna

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