DRVPROC.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /**************************************************************************
  2.  *
  3.  *  THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
  4.  *  KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  5.  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
  6.  *  PURPOSE.
  7.  *
  8.  *  Copyright (C) 1992 - 1997 Microsoft Corporation.  All Rights Reserved.
  9.  *
  10.  **************************************************************************/
  11. /****************************************************************************
  12.  *
  13.  *   drvproc.c
  14.  *
  15.  ***************************************************************************/
  16. #include <windows.h>
  17. #include <windowsx.h>
  18. #include <mmsystem.h>
  19. #include <vfw.h>
  20. #include "TxtOut.h"
  21. HMODULE ghModule;
  22. /***************************************************************************
  23.  *
  24.  * DriverProc The entry point for an installable driver.
  25.  *
  26.  ***************************************************************************/
  27. LRESULT WINAPI DriverProc(
  28. DWORD dwDriverID,
  29. HDRVR hDriver,
  30. UINT uiMessage,
  31. LPARAM lParam1,
  32. LPARAM lParam2)
  33. {
  34. INSTINFO *pi = (INSTINFO *)(UINT)dwDriverID;
  35. switch (uiMessage)
  36. {
  37. case DRV_LOAD:
  38. return (LRESULT) Load();
  39. case DRV_FREE:
  40. Free();
  41. return (LRESULT)1L;
  42. case DRV_OPEN:
  43. // if being opened with no open struct, then return a non-zero
  44. // value without actually opening
  45. if (lParam2 == 0L)
  46. return 0xFFFF0000;
  47. return (LRESULT)(DWORD)(UINT)Open((ICOPEN FAR *) lParam2);
  48.       case DRV_CLOSE:
  49.       if (dwDriverID != 0xFFFF0000)
  50.           Close(pi);
  51. return (LRESULT)1L;
  52. /*********************************************************************
  53. state messages
  54. *********************************************************************/
  55. case DRV_QUERYCONFIGURE: // configuration from drivers applet
  56. return (LRESULT)0L;
  57. case DRV_CONFIGURE:
  58. return DRV_OK;
  59. case ICM_CONFIGURE:
  60. //
  61. // return ICERR_OK if you will do a configure box, error otherwise
  62. //
  63. if (lParam1 == -1)
  64. return QueryConfigure(pi) ? ICERR_OK : ICERR_UNSUPPORTED;
  65. else
  66. return Configure(pi, (HWND)lParam1);
  67. case ICM_ABOUT:
  68. //
  69. // return ICERR_OK if you will do a about box, error otherwise
  70. //
  71. if (lParam1 == -1)
  72. return QueryAbout(pi) ? ICERR_OK : ICERR_UNSUPPORTED;
  73. else
  74. return About(pi, (HWND)lParam1);
  75. case ICM_GETSTATE:
  76. return GetState(pi, (LPVOID)lParam1, (DWORD)lParam2);
  77. case ICM_SETSTATE:
  78. return SetState(pi, (LPVOID)lParam1, (DWORD)lParam2);
  79. case ICM_GETINFO:
  80. return GetInfo(pi, (ICINFO FAR *)lParam1, (DWORD)lParam2);
  81. /*********************************************************************
  82. draw messages
  83. *********************************************************************/
  84. case ICM_DRAW_QUERY:
  85. return DrawQuery(pi, (LPVOID FAR *)lParam1);
  86. case ICM_DRAW_BEGIN:
  87. return DrawBegin(pi,(ICDRAWBEGIN FAR *)lParam1, (DWORD)lParam2);
  88. case ICM_DRAW:
  89. return Draw(pi,(ICDRAW FAR *)lParam1, (DWORD)lParam2);
  90. case ICM_DRAW_END:
  91. return DrawEnd(pi);
  92. /*********************************************************************
  93. standard driver messages
  94. *********************************************************************/
  95. case DRV_DISABLE:
  96. case DRV_ENABLE:
  97. return (LRESULT)1L;
  98. case DRV_INSTALL:
  99. case DRV_REMOVE:
  100. return (LRESULT)DRV_OK;
  101. }
  102. if (uiMessage < DRV_USER)
  103. return DefDriverProc(dwDriverID, hDriver, uiMessage,
  104. lParam1,lParam2);
  105. else
  106. return ICERR_UNSUPPORTED;
  107. }
  108. /****************************************************************************
  109.  *
  110.  * DllMain Library initialization code.
  111.  *
  112.  ***************************************************************************/
  113. APIENTRY DllMain(HANDLE, DWORD, LPVOID);
  114. APIENTRY DllMain(
  115. HANDLE hModule,
  116. DWORD dwReason,
  117. LPVOID lpReserved )
  118. {
  119. switch( dwReason)
  120. {
  121. case DLL_PROCESS_ATTACH:
  122. if(ghModule == NULL)
  123. ghModule = (HMODULE)hModule;
  124. break;
  125. case DLL_THREAD_ATTACH:
  126. break;
  127. case DLL_THREAD_DETACH:
  128. break;
  129. case DLL_PROCESS_DETACH:
  130. break;
  131. }
  132. return TRUE;
  133. }