SHARE
TWEET

Untitled

a guest Jul 17th, 2017 45 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <windows.h>
  2.  
  3. #include "zasoby.h"
  4.  
  5. //  Declare Windows procedure
  6. LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
  7.  
  8. //  Make the class name into a global variable
  9. char szClassName[ ] = "MOJE_OKNO";
  10.  
  11. //globalny wskaźnik na główne okno
  12. HINSTANCE   g_hInstance;
  13. HWND        g_hwndMain;
  14.  
  15. HINSTANCE hDll;
  16.  
  17. typedef void (*MYPROC)(HDC);
  18. MYPROC Func;
  19.  
  20. //główna procedura aplikacji okienkowej, odpowienik main z aplikacji konsolowych
  21. int WINAPI WinMain (HINSTANCE hInstance,
  22.             HINSTANCE hPrevInstance,
  23.             LPSTR lpCmdLine,
  24.             int nCmdShow)
  25.  
  26. {
  27.     HWND hwnd;          //uchwyt naszego okna
  28.     MSG messages;           //ta zmienna zapamiętuje komunikaty/zdarzenia w naszym programie
  29.     WNDCLASS okno;          //struktura danych dla klasy okna
  30.  
  31.     //uzupełniamy globalne wskaźniki instancji
  32.     g_hInstance=hInstance;
  33.  
  34.     //strutura okna
  35.     ZeroMemory(&okno, sizeof(WNDCLASS));//zwalniamy miejsce w pamięci na które wskazuje okno
  36.     okno.hInstance = hInstance;
  37.     okno.lpszClassName = szClassName;       //nazwa naszego okna
  38.     okno.lpfnWndProc = WindowProcedure;   //funkcja która będzie wywoływana do obsługi komunikatów
  39.     okno.style = CS_DBLCLKS;         // Catch double-clicks
  40.  
  41.     // Use default icon and mouse-pointer //
  42.     okno.hIcon = LoadIcon (hInstance, "IKONA");
  43.     okno.hCursor = LoadCursor (NULL, IDC_ARROW);
  44.     okno.lpszMenuName = "MENU_GLOWNE";          //nazwa naszego okna
  45.     okno.cbClsExtra = 0;                      //okresla ile dodatkowej pamieci przydzielić dla klasy okna
  46.     okno.cbWndExtra = 0;                      //a ile dla samego okna
  47.     //używamy czarnego pędzla do namalowania tła okna - czyli ustalamy kolor tła na czarny
  48.     okno.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
  49.  
  50.     // Register the window class, and if it fails quit the program //
  51.     if (!RegisterClass (&okno))
  52.         return 1;
  53.  
  54.     // The class is registered, let's create the program //
  55.     hwnd = CreateWindow (       //tworzenie okna
  56.         szClassName,         //nazwa klasy okna
  57.         "Architektura Komputerów II - <WINAPI & DLL>", //tytul okna - tekst wyświetlany na pasku tytułowym
  58.         WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, //menu systemowym w prawym górnym rogu okna, przycisk zamknij i minimalizuj
  59.         CW_USEDEFAULT,  //początkowa pozycja pozioma okna na ekranie pozostawiona systemowi
  60.         CW_USEDEFAULT,  //początkowa pozycja pionowa okna na ekranie pozostawiona systemowi
  61.         600,            //szerokosc okna w pikselach
  62.         600,            //wysokosc okna w pikselach
  63.         NULL,           //uchwyt rodzica - w tym przypadku brak okna nadrzędnego właściciel pulpit
  64.         NULL,           //uchwyt do menu
  65.         hInstance,      //uchwyt instancji
  66.         NULL            //dodatkowe informacje zazwyczaj NULL
  67.         );
  68.     //globalny wskaźnik na okno
  69.     g_hwndMain=hwnd;
  70.  
  71.     // Make the window visible on the screen //
  72.     ShowWindow (hwnd, SW_SHOW);     //uwidacznianie okna
  73.     UpdateWindow (hwnd);
  74.    
  75.     // Run the message loop. It will run until GetMessage() returns 0 //
  76.     while (GetMessage (&messages, NULL, 0, 0))
  77.     {
  78.         // Translate virtual-key messages into character messages //
  79.         TranslateMessage(&messages);
  80.         // Send message to WindowProcedure //
  81.         DispatchMessage(&messages);         //przesyła komunikat systemu do procedury okna gdzie następuje na niego reakcja
  82.     }
  83.  
  84.     // The program return-value is 0 - The value that PostQuitMessage() gave //
  85.     return messages.wParam;
  86. }
  87.  
  88.  
  89. //  This function is called by the Windows function DispatchMessage()  //
  90.  
  91. LRESULT CALLBACK WindowProcedure (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  92. {
  93.     PAINTSTRUCT ps;
  94.  
  95.     switch (message)    // handle the messages //
  96.     {
  97.         case WM_CLOSE:
  98.             DestroyWindow(hWnd);
  99.             PostQuitMessage(0); // send a WM_QUIT to the message queue //
  100.             break;
  101.         case WM_COMMAND:
  102.             switch (LOWORD(wParam)){
  103.                 case PLIK_WYJSCIE:
  104.                     DestroyWindow(hWnd);
  105.                     PostQuitMessage(0); // send a WM_QUIT to the message queue //
  106.                     return 0;
  107.                 case POMOC_ABOUT:
  108.                     MessageBox(hWnd,"Program WINAPI, korzystajacy z dynamicznej biblioteki DLL\nArch2-4\nAutor:\nT. Pawelec, E. Szymanska","O programie", MB_OK | MB_ICONINFORMATION);
  109.                     return 0;
  110.                 case RYSUJ_CZYSC:
  111.                     InvalidateRect(hWnd, 0, TRUE);
  112.                     UpdateWindow(hWnd);
  113.                     return 0;
  114.                 case RYSUJ:
  115.                     hDll = LoadLibrary("../dll/biblioteka.dll");  //załadowanie biblioteki DLL do pamięci
  116.                     if(hDll != NULL)
  117.                     {
  118.                                         
  119.                           Func = (MYPROC)GetProcAddress(hDll, "Rysuj");
  120.                                 
  121.                           HDC wykonaj = BeginPaint(hWnd, &ps);
  122.                           Func(wykonaj);
  123.                           EndPaint(hWnd, &ps);
  124.                                         
  125.                           FreeLibrary(hDll);
  126.                     }
  127.                     else
  128.                         MessageBox (0, "Nie odnaleziono Biblioteki DLL", "Komunikat", MB_OK | MB_ICONINFORMATION);
  129.                     return 0;
  130.             }
  131.             break;
  132.         default:        // for messages that we don't deal with //
  133.             return DefWindowProc (hWnd, message, wParam, lParam);
  134.     }
  135.  
  136.     return 0;
  137. }
RAW Paste Data
Pastebin PRO Autumn Special!
Get 40% OFF on Pastebin PRO accounts!
Top