//Листинг 5.3. Явная загрузка DLL-функций typedef BOOL (WINAPI* PFN) (HDC, POINT*); LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; static HINSTANCE hLibrary; static PFN pfnTriangle; static HPEN hPen; static int sx, sy; POINT pt[3]; switch (message) { case WM_CREATE: hLibrary = LoadLibrary(_T("Triangle")); if(hLibrary) { pfnTriangle = (PFN)GetProcAddress(hLibrary, "Triangle"); if (pfnTriangle == NULL) { MessageBox(hWnd, _T("Функция Triangle не найдена"), _T ("LoadLibrary"), MB_OK | MB_ICONQUESTION); DestroyWindow(hWnd); return 0; } hPen = CreatePen(PS_SOLID, 4, RGB(0, 0, 255)); } else { MessageBox(hWnd, _T("Библиотека не найдена"), _T("LoadLibrary"), MB_OK | MB_ICONQUESTION); DestroyWindow(hWnd); return 0; } break; case WM_SIZE: sx = LOWORD(lParam); sy = HIWORD(lParam); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); SelectObject(hdc, hPen); pt[0].x = sx/4; pt[0].y = pt[1].y = sy/4; pt[1].x = sx*3/4; pt[2].x = sx/2; pt[2].y = sy/2; pfnTriangle(hdc, pt); EndPaint(hWnd, &ps); break; case WM_DESTROY: FreeLibrary(hLibrary); DeleteObject(hPen); PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }