SAMPLE1A.C
上传用户:guoxiu1214
上传日期:2019-02-27
资源大小:876k
文件大小:7k
源码类别:

多显示器编程

开发平台:

Visual C++

  1. /*******************************************************************************
  2. Copyright Datapath Ltd. 2008.
  3. File:    SAMPLE1A.C
  4. Purpose: VisionRGB-PRO and VisionRGB-X example program that shows how to display
  5.          an RGB window.
  6. History:
  7.          16 JAN 08    SB   Created.
  8. *******************************************************************************/
  9. #include <windows.h>
  10. #include <api.h>
  11. #include <rgb.h>
  12. #include <rgberror.h>
  13. #include "resource.h"
  14. /* Static Constants ***********************************************************/
  15. static const TCHAR
  16.    RGBWindowClass[]  = { TEXT("RGBSampleWndClass") },
  17.    Property[]        = { TEXT("RGB") },
  18.    Caption[]         = { TEXT("RGB Sample 1A") };
  19. static const TCHAR
  20.    _RGBDllName[] = { TEXT("rgbx.dll") };
  21. /* Global Variables ***********************************************************/
  22. static HWND          gHWnd = NULL;
  23. static HINSTANCE     gHInstance = NULL;
  24. /******************************************************************************/
  25. /* Define pointers to functions in the RGB DLL. */
  26. #define API(type,modifier,name,args) 
  27.    type (modifier *name) args = NULL;
  28. #include <rgbapi.h>
  29. #undef API
  30. /******************************************************************************/
  31. LRESULT CALLBACK
  32. RGBWndProc (
  33.    HWND     hWnd,
  34.    UINT     message,
  35.    WPARAM   wParam,
  36.    LPARAM   lParam )
  37. {
  38.    switch ( message )
  39.    {
  40.       case WM_COMMAND:
  41.       {
  42.          switch ( LOWORD ( wParam ) )
  43.          {
  44.             case IDM_EXIT:
  45.             {
  46.                DestroyWindow ( hWnd );
  47.                break;
  48.             }
  49.          }
  50.          break;
  51.       }
  52.       case WM_CREATE:
  53.       {
  54.          LPCREATESTRUCT pCreateStruct = (LPCREATESTRUCT) lParam;
  55.          SetProp ( hWnd, Property, pCreateStruct->lpCreateParams );
  56.          break;
  57.       }
  58.       case WM_CLOSE:
  59.       {
  60.          DestroyWindow ( hWnd );
  61.          break;
  62.       }
  63.       case WM_DESTROY:
  64.       {
  65.          HRGB hRGB = (HRGB)RemoveProp ( hWnd, Property );
  66.          if ( hRGB )
  67.          {
  68.             RGBSetWindow ( hRGB, NULL );
  69.             RGBCloseInput ( hRGB );
  70.          }
  71.          PostQuitMessage ( 1 );
  72.          break;
  73.       }
  74.       default:
  75.       {
  76.          return DefWindowProc ( hWnd, message, wParam, lParam );
  77.       }
  78.    }
  79.    return 0;
  80. }
  81. /******************************************************************************/
  82. unsigned long
  83. RegisterRGBWindowClass (
  84.    HINSTANCE   hInstance )
  85. {
  86.    WNDCLASS wc;
  87.    wc.style = 0;
  88.    wc.lpfnWndProc = (WNDPROC)RGBWndProc;
  89.    wc.cbClsExtra = 0;
  90.    wc.cbWndExtra = 0;
  91.    wc.hInstance = hInstance;
  92.    wc.hIcon = LoadIcon ( hInstance, MAKEINTRESOURCE ( IDI_ICON ));
  93.    wc.hCursor = LoadCursor ( NULL, IDC_ARROW );
  94.    wc.hbrBackground = NULL;
  95.    wc.lpszMenuName =  MAKEINTRESOURCE ( IDR_MENU );
  96.    wc.lpszClassName = RGBWindowClass;
  97.    if ( RegisterClass ( &wc ) == 0 )
  98.    {
  99.       return GetLastError ();
  100.    }
  101.    else
  102.    {
  103.       return 0;
  104.    }
  105. }
  106. /******************************************************************************/
  107. unsigned long
  108. CreateRGBWindow (
  109.    unsigned long  input )
  110. {
  111.    unsigned long  error;
  112.    HRGB           hRGB;
  113.    error = RGBOpenInput ( input, &hRGB );
  114.    if ( error == 0 )
  115.    {
  116.       /* Create the window. */
  117.       gHWnd = CreateWindow ( RGBWindowClass, Caption,
  118.             WS_OVERLAPPEDWINDOW,
  119.             CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
  120.             (HWND)NULL, NULL, gHInstance, (LPVOID)hRGB );
  121.       if ( gHWnd )
  122.       {
  123.          RGBSetWindow ( hRGB, gHWnd );
  124.          ShowWindow ( gHWnd, SW_SHOWNORMAL );
  125.          /* Maximise the capture rate. */
  126.          RGBSetFrameDropping ( hRGB, 0 );
  127.          return 0;
  128.       }
  129.       else
  130.       {
  131.          error = GetLastError ( );
  132.       }
  133.       RGBCloseInput ( hRGB );
  134.    }
  135.    return error;
  136. }
  137. /******************************************************************************/
  138. unsigned long
  139. LoadRGBDLL (
  140.    HINSTANCE   *pHInstance )
  141. {
  142.    /* List of function names used to load the RGB DLL. */
  143.    static APIFNENTRY fnList[] =
  144.    {
  145.       #define API(type,modifier,name,args) 
  146.          { (FARPROC *)&name, #name },
  147.       #include <rgbapi.h>
  148.       #undef API
  149.       { NULL, NULL }
  150.    };
  151.    HINSTANCE      hInstance;
  152.    unsigned long  error;
  153.    /* Load the interface DLL. */
  154.    error = APILoadLibrary ( _RGBDllName, &hInstance );
  155.    if ( error == 0 )
  156.    {
  157.       /* Find each of the functions exported by the interface. */
  158.       if ( APILoadFunctions ( hInstance, fnList, NULL ))
  159.       {
  160.          *pHInstance = hInstance;
  161.       }
  162.       else
  163.       {
  164.          APIFreeLibrary ( hInstance );
  165.          error = API_ERROR_INCOMPATIBLE_API;
  166.       }
  167.    }
  168.    return error;
  169. }
  170. /******************************************************************************/
  171. int APIENTRY
  172. wWinMain (
  173.    HINSTANCE   hInstance,
  174.    HINSTANCE   hPrevInstance,
  175.    LPSTR       lpCmdLine,
  176.    int         nShowCmd )
  177. {
  178.    unsigned long  error;
  179.    MSG            msg;
  180.    HINSTANCE      hDLLInstance;
  181.    HRGBDLL        hRGBDLL = 0;
  182.    gHInstance = hInstance;
  183.    /* Register the RGBWindowClass. */
  184.    error = RegisterRGBWindowClass ( gHInstance );
  185.    if ( error )
  186.    {
  187.       TCHAR buffer[256];
  188.       wsprintf ( buffer, TEXT("Error Registering the window class: 0x%08x"), error );
  189.       MessageBox ( NULL, buffer, Caption, MB_OK | MB_ICONERROR );
  190.       return error;
  191.    }
  192.    error = LoadRGBDLL( &hDLLInstance );
  193.    if ( error )
  194.    {
  195.       TCHAR buffer[256];
  196.       wsprintf ( buffer, TEXT("Unable to load %s."), _RGBDllName );
  197.       MessageBox ( NULL, buffer, Caption, MB_OK | MB_ICONERROR );
  198.       return error;
  199.    }
  200.    
  201.    error = RGBLoad ( &hRGBDLL );
  202.    if ( error )
  203.    {
  204.       TCHAR buffer[256];
  205.       wsprintf ( buffer, TEXT("Error returned from RGBLoad: 0x%08x"), error );
  206.       MessageBox ( NULL, buffer, Caption, MB_OK | MB_ICONERROR );
  207.       return error;
  208.    }
  209.    /* Create the application window on input 0. */
  210.    error = CreateRGBWindow ( 0 );
  211.    if ( error )
  212.    {
  213.       TCHAR buffer[256];
  214.       wsprintf ( buffer, TEXT("Error creating the application window: 0x%08x"),
  215.             error );
  216.       MessageBox ( NULL, buffer, Caption, MB_OK | MB_ICONERROR );
  217.       return error;
  218.    }
  219.    /* Sit in the message loop until we are stopped. */
  220.    while ( GetMessage ( &msg, NULL, 0,0 ))
  221.    {
  222.       TranslateMessage ( &msg );
  223.       DispatchMessage ( &msg );
  224.    }
  225.    if ( hRGBDLL )
  226.    {
  227.       error = RGBFree ( hRGBDLL );
  228.    }
  229.    if ( hDLLInstance )
  230.    {
  231.       error = APIFreeLibrary ( hDLLInstance );
  232.    }
  233.    
  234.    return error;
  235.    UNREFERENCED_PARAMETER ( nShowCmd );
  236.    UNREFERENCED_PARAMETER ( lpCmdLine );
  237.    UNREFERENCED_PARAMETER ( hPrevInstance );
  238. }
  239. /******************************************************************************/