Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include "zasoby.h"
- // Declare Windows procedure
- LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
- // Make the class name into a global variable
- char szClassName[ ] = "MOJE_OKNO";
- //globalny wskaźnik na główne okno
- HINSTANCE g_hInstance;
- HWND g_hwndMain;
- HINSTANCE hDll;
- typedef void (*MYPROC)(HDC);
- MYPROC Func;
- //główna procedura aplikacji okienkowej, odpowienik main z aplikacji konsolowych
- int WINAPI WinMain (HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPSTR lpCmdLine,
- int nCmdShow)
- {
- HWND hwnd; //uchwyt naszego okna
- MSG messages; //ta zmienna zapamiętuje komunikaty/zdarzenia w naszym programie
- WNDCLASS okno; //struktura danych dla klasy okna
- //uzupełniamy globalne wskaźniki instancji
- g_hInstance=hInstance;
- //strutura okna
- ZeroMemory(&okno, sizeof(WNDCLASS));//zwalniamy miejsce w pamięci na które wskazuje okno
- okno.hInstance = hInstance;
- okno.lpszClassName = szClassName; //nazwa naszego okna
- okno.lpfnWndProc = WindowProcedure; //funkcja która będzie wywoływana do obsługi komunikatów
- okno.style = CS_DBLCLKS; // Catch double-clicks
- // Use default icon and mouse-pointer //
- okno.hIcon = LoadIcon (hInstance, "IKONA");
- okno.hCursor = LoadCursor (NULL, IDC_ARROW);
- okno.lpszMenuName = "MENU_GLOWNE"; //nazwa naszego okna
- okno.cbClsExtra = 0; //okresla ile dodatkowej pamieci przydzielić dla klasy okna
- okno.cbWndExtra = 0; //a ile dla samego okna
- //używamy czarnego pędzla do namalowania tła okna - czyli ustalamy kolor tła na czarny
- okno.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
- // Register the window class, and if it fails quit the program //
- if (!RegisterClass (&okno))
- return 1;
- // The class is registered, let's create the program //
- hwnd = CreateWindow ( //tworzenie okna
- szClassName, //nazwa klasy okna
- "Architektura Komputerów II - <WINAPI & DLL>", //tytul okna - tekst wyświetlany na pasku tytułowym
- WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, //menu systemowym w prawym górnym rogu okna, przycisk zamknij i minimalizuj
- CW_USEDEFAULT, //początkowa pozycja pozioma okna na ekranie pozostawiona systemowi
- CW_USEDEFAULT, //początkowa pozycja pionowa okna na ekranie pozostawiona systemowi
- 600, //szerokosc okna w pikselach
- 600, //wysokosc okna w pikselach
- NULL, //uchwyt rodzica - w tym przypadku brak okna nadrzędnego właściciel pulpit
- NULL, //uchwyt do menu
- hInstance, //uchwyt instancji
- NULL //dodatkowe informacje zazwyczaj NULL
- );
- //globalny wskaźnik na okno
- g_hwndMain=hwnd;
- // Make the window visible on the screen //
- ShowWindow (hwnd, SW_SHOW); //uwidacznianie okna
- UpdateWindow (hwnd);
- // Run the message loop. It will run until GetMessage() returns 0 //
- while (GetMessage (&messages, NULL, 0, 0))
- {
- // Translate virtual-key messages into character messages //
- TranslateMessage(&messages);
- // Send message to WindowProcedure //
- DispatchMessage(&messages); //przesyła komunikat systemu do procedury okna gdzie następuje na niego reakcja
- }
- // The program return-value is 0 - The value that PostQuitMessage() gave //
- return messages.wParam;
- }
- // This function is called by the Windows function DispatchMessage() //
- LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- PAINTSTRUCT ps;
- switch (message) // handle the messages //
- {
- case WM_CLOSE:
- DestroyWindow(hWnd);
- PostQuitMessage(0); // send a WM_QUIT to the message queue //
- break;
- case WM_COMMAND:
- switch (LOWORD(wParam)){
- case PLIK_WYJSCIE:
- DestroyWindow(hWnd);
- PostQuitMessage(0); // send a WM_QUIT to the message queue //
- return 0;
- case POMOC_ABOUT:
- MessageBox(hWnd,"Program WINAPI, korzystajacy z dynamicznej biblioteki DLL\nArch2-4\nAutor:\nT. Pawelec, E. Szymanska","O programie", MB_OK | MB_ICONINFORMATION);
- return 0;
- case RYSUJ_CZYSC:
- InvalidateRect(hWnd, 0, TRUE);
- UpdateWindow(hWnd);
- return 0;
- case RYSUJ:
- hDll = LoadLibrary("../dll/biblioteka.dll"); //załadowanie biblioteki DLL do pamięci
- if(hDll != NULL)
- {
- Func = (MYPROC)GetProcAddress(hDll, "Rysuj");
- HDC wykonaj = BeginPaint(hWnd, &ps);
- Func(wykonaj);
- EndPaint(hWnd, &ps);
- FreeLibrary(hDll);
- }
- else
- MessageBox (0, "Nie odnaleziono Biblioteki DLL", "Komunikat", MB_OK | MB_ICONINFORMATION);
- return 0;
- }
- break;
- default: // for messages that we don't deal with //
- return DefWindowProc (hWnd, message, wParam, lParam);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement