Advertisement
Guest User

Untitled

a guest
Jul 17th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.02 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement