fluid_dll.c
上传用户:tjmskj2
上传日期:2020-08-17
资源大小:577k
文件大小:3k
源码类别:

midi

开发平台:

C/C++

  1. /* FluidSynth - A Software Synthesizer
  2.  *
  3.  * Copyright (C) 2003  Peter Hanappe and others.
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Library General Public License
  7.  * as published by the Free Software Foundation; either version 2 of
  8.  * the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful, but
  11.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Library General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Library General Public
  16.  * License along with this library; if not, write to the Free
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  18.  * 02111-1307, USA
  19.  */
  20. #ifdef WIN32
  21. #include "fluidsynth_priv.h"
  22. #include "fluid_sys.h"
  23. static HINSTANCE fluid_hinstance = NULL;
  24. static HWND fluid_wnd = NULL;
  25. int fluid_win32_create_window(void);
  26. #ifndef FLUIDSYNTH_NOT_A_DLL
  27. BOOL WINAPI DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  28. {
  29.   FLUID_LOG(FLUID_DBG, "DllMain");
  30.   fluid_set_hinstance((void*) hModule);
  31.   fluid_win32_create_window();
  32.   return TRUE;
  33. }
  34. #endif
  35. /**
  36.  * Set the handle to the instance of the application on the Windows platform.
  37.  * @param Application instance pointer
  38.  *
  39.  * The handle is needed to open DirectSound.
  40.  */
  41. void fluid_set_hinstance(void* hinstance)
  42. {
  43.   if (fluid_hinstance == NULL) {
  44.     fluid_hinstance = (HINSTANCE) hinstance;
  45.     FLUID_LOG(FLUID_DBG, "DLL instance = %d", (int) fluid_hinstance);
  46.   }
  47. }
  48. /**
  49.  * Get the handle to the instance of the application on the Windows platform.
  50.  * @return Application instance pointer or NULL if not set
  51.  */
  52. void* fluid_get_hinstance(void)
  53. {
  54.   return (void*) fluid_hinstance;
  55. }
  56. static long FAR PASCAL fluid_win32_wndproc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  57. {
  58.   switch (message) {
  59.   case WM_CREATE:
  60.     break;
  61.   case WM_DESTROY:
  62.     break;
  63.   default:
  64.     return DefWindowProc(hWnd, message, wParam, lParam);
  65.     break;
  66.   }
  67.   return(0L);
  68. }
  69. int fluid_win32_create_window(void)
  70. {
  71.   WNDCLASS myClass;
  72.   myClass.hCursor = LoadCursor( NULL, IDC_ARROW );
  73.   myClass.hIcon = NULL;
  74.   myClass.lpszMenuName = (LPSTR) NULL;
  75.   myClass.lpszClassName = (LPSTR) "FluidSynth";
  76.   myClass.hbrBackground = (HBRUSH)(COLOR_WINDOW);
  77.   myClass.hInstance = fluid_hinstance;
  78.   myClass.style = CS_GLOBALCLASS;
  79.   myClass.lpfnWndProc = fluid_win32_wndproc;
  80.   myClass.cbClsExtra = 0;
  81.   myClass.cbWndExtra = 0;
  82.   if (!RegisterClass(&myClass)) {
  83.     return -100;
  84.   }
  85.   fluid_wnd = CreateWindow((LPSTR) "FluidSynth", (LPSTR) "FluidSynth", WS_OVERLAPPEDWINDOW,
  86.   CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, (HWND) NULL, (HMENU) NULL,
  87.   fluid_hinstance, (LPSTR) NULL);
  88.   if (fluid_wnd == NULL) {
  89.     FLUID_LOG(FLUID_ERR, "Can't create window");
  90.     return -101;
  91.   }
  92.   return 0;
  93. }
  94. HWND fluid_win32_get_window(void)
  95. {
  96. return fluid_wnd;
  97. }
  98. #endif // #ifdef WIN32