Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Okienka stylu WS_OVERLAPPEDWINDOW, po kliknięciu lewym klawiszem myszy otwiera się nowe okno
- (ograniczenie do 5 okien + messagebox), po kliknięciu prawym myszki usuwają się wszystkie okienka poza
- okienkiem gdzie nastąpiło kliknięcie.
- Ostatnie okienko podczas zamykania ma uruchomić messagebox z pożegnaniem. */
- #include "stdafx.h"
- #include <windows.h>
- #include <vector>
- #define ROZMIAR 5
- using std::vector;
- HINSTANCE hInstance;
- vector <HWND> hwnd;
- TCHAR nazwaKlasy[] = TEXT("Nazwa klasy okna");
- TCHAR nazwaAplikacji[] = TEXT("Aplikacja");
- LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch (msg)
- {
- case WM_LBUTTONDOWN:
- if (hwnd.size() < ROZMIAR)
- hwnd.push_back(CreateWindowEx(0, nazwaKlasy, nazwaAplikacji, WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, 0));
- else
- MessageBox(hWnd, TEXT("Za dużo okien"), TEXT("Błąd"), MB_OK | MB_ICONERROR | MB_TASKMODAL);
- break;
- case WM_RBUTTONDOWN:
- for (unsigned int i = 0; i < hwnd.size(); ++i)
- if (hwnd[i] != hWnd)
- {
- DestroyWindow(hwnd[i]);
- hwnd.erase(hwnd.begin() + i);
- i--;
- }
- break;
- case WM_CLOSE:
- if (hwnd.size() == 1)
- MessageBox(hWnd, TEXT("Koniec"), TEXT("Zakończ"), MB_OK | MB_ICONINFORMATION);
- for (unsigned int i = 0; i < hwnd.size(); ++i)
- if (hwnd[i] == hWnd)
- {
- DestroyWindow(hwnd[i]);
- hwnd.erase(hwnd.begin() + i);
- break;
- }
- if (hwnd.size() == 0)
- PostQuitMessage(0);
- break;
- default:
- return DefWindowProc(hWnd, msg, wParam, lParam);
- }
- return 0;
- }
- bool RejestracjaKlasy(WNDCLASSEX &wc)
- {
- wc.cbClsExtra = 0;
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.cbWndExtra = 0;
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wc.hIconSm = 0;
- wc.hInstance = hInstance;
- wc.lpfnWndProc = WndProc;
- wc.lpszClassName = nazwaKlasy;
- wc.lpszMenuName = 0;
- wc.style = CS_HREDRAW | CS_VREDRAW;
- if (!RegisterClassEx(&wc))
- {
- MessageBox(0, TEXT("Błąd rejestracji klasy okna"), TEXT("Błąd"), MB_OK | MB_ICONERROR | MB_TASKMODAL);
- return true;
- }
- return false;
- }
- int WINAPI WinMain(HINSTANCE _hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
- {
- hInstance = _hInstance;
- WNDCLASSEX wc;
- MSG msg;
- if (RejestracjaKlasy(wc))
- return 1;
- hwnd.push_back(CreateWindowEx(0, nazwaKlasy, nazwaAplikacji, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, hInstance, 0));
- if (!hwnd[0])
- {
- MessageBox(0, TEXT("Błąd okna"), TEXT("Błąd"), MB_OK | MB_ICONERROR | MB_TASKMODAL);
- return 1;
- }
- ShowWindow(hwnd[0], nShowCmd);
- UpdateWindow(hwnd[0]);
- while (GetMessage(&msg, 0, 0, 0) > 0)
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- UnregisterClass(nazwaKlasy, hInstance);
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment