home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / basic / library / vb / diamond / diamond2.c < prev    next >
C/C++ Source or Header  |  1992-03-06  |  5KB  |  188 lines

  1. #include "windows.h"
  2. #include "custcntl.h"
  3. #include "diamond.h"
  4.  
  5. extern HANDLE       hLibData;
  6. extern HANDLE       hInst;
  7. extern HANDLE       hData;
  8. extern HANDLE       hFont;
  9. extern HANDLE       hOldFont;
  10.  
  11. extern LPFNSTRTOID  lpfnVerId;
  12. extern LPFNIDTOSTR  lpfnIdStr;
  13.  
  14. extern char *CLASSNAME;
  15.  
  16.  
  17. #define ID            GetWindowWord(hWnd,GWW_ID)
  18. #define PARENT        GetWindowWord(hWnd,GWW_HWNDPARENT)
  19. #define INSTANCE      GetWindowWord(hWnd,GWW_HINSTANCE)
  20. #define DEREF(h)      ((DIAMONDSTRUCT *)LocalLock(h))
  21.  
  22.  
  23.  
  24.  
  25. HANDLE FAR PASCAL DiamondInfo( void )           /*  Initialize information  */
  26. {
  27.    HANDLE hCtlInfo;
  28.    LPCTLINFO   lpCtlInfo;
  29.  
  30.    hCtlInfo = GlobalAlloc( GHND, (DWORD)sizeof(CTLINFO) );
  31.    if( hCtlInfo )
  32.    {
  33.       lpCtlInfo = (LPCTLINFO)GlobalLock( hCtlInfo );
  34.       if( lpCtlInfo )
  35.       {
  36.          lpCtlInfo->wVersion = 100;
  37.          lpCtlInfo->wCtlTypes = 1;
  38.  
  39.          lstrcpy( lpCtlInfo->szClass, CLASSNAME );
  40.          lstrcpy( lpCtlInfo->szTitle, "1" );
  41.  
  42.  
  43.          lpCtlInfo->Type[ 0 ].wType = 0;
  44.          lpCtlInfo->Type[ 0 ].wWidth = 32;                     /*  Set size  */
  45.          lpCtlInfo->Type[ 0 ].wHeight = 32;             /*  Initialize flags  */
  46.          lpCtlInfo->Type[ 0 ].dwStyle = WS_CHILD | BS_AUTO3STATE;
  47.  
  48.          lstrcpy( lpCtlInfo->Type[ 0 ].szDescr, CLASSNAME );
  49.          GlobalUnlock( hCtlInfo );
  50.       }
  51.       else
  52.       {
  53.          GlobalFree( hCtlInfo );
  54.          hCtlInfo = NULL;
  55.       }
  56.    }
  57.    return( hCtlInfo );
  58. }
  59.  
  60.  
  61.  
  62.  
  63. BOOL FAR PASCAL DiamondStyle( hWnd, hCtlStyle, lpfnVerifyId, lpfnGetIdStr )
  64. HWND hWnd;
  65. HANDLE hCtlStyle;
  66. LPFNSTRTOID lpfnVerifyId;
  67. LPFNIDTOSTR lpfnGetIdStr;
  68. {
  69.    FARPROC     lpDlgFn;
  70.    HANDLE      hNewCtlStyle;
  71.    LPCTLSTYLE lpCtlStyle;
  72.    LONG Style;
  73.  
  74.    hLibData = hCtlStyle;                      /*  This calls the dialog box  */
  75.    lpfnVerId = lpfnVerifyId;
  76.    lpfnIdStr = lpfnGetIdStr;
  77.  
  78.    lpDlgFn = MakeProcInstance( (FARPROC)DiamondDlgFn, hInst );
  79.  
  80.    if( DialogBox( hInst, CLASSNAME, hWnd, lpDlgFn ) )    /*  If OK pressed  */
  81.       hNewCtlStyle = hLibData;                    /*  Return non-zero value  */
  82.    else
  83.       hNewCtlStyle = NULL;                       /*  Else return ZERO value  */
  84.  
  85.    FreeProcInstance( lpDlgFn );
  86.  
  87.    return( hNewCtlStyle );
  88. }
  89.  
  90.  
  91.  
  92.  
  93. WORD FAR PASCAL DiamondFlags( wFlags, lpszString, wMaxString )
  94. WORD wFlags;
  95. LPSTR lpszString;
  96. WORD wMaxString;
  97. {
  98.    lpszString[ 0 ] = NULL;   /*  These strings get written to the .DLG file  */
  99.  
  100.    return( lstrlen( lpszString ) );
  101. }
  102.  
  103.  
  104.  
  105. BOOL FAR PASCAL DiamondDlgFn( HWND hDlg, WORD msg, WORD wParam, LONG lParam )
  106. {
  107.    switch( msg )
  108.    {
  109.       case WM_INITDIALOG:
  110.       {
  111.          HANDLE hCtlStyle;
  112.          LPCTLSTYLE lpCtlStyle;
  113.          char szID[ 20 ];
  114.  
  115.          hCtlStyle = hLibData;
  116.          if( hCtlStyle )
  117.          {
  118.             SetProp( hDlg, MAKEINTRESOURCE( 1 ), hCtlStyle );
  119.             lpCtlStyle = (LPCTLSTYLE)GlobalLock( hCtlStyle );
  120.  
  121.             if( lpfnIdStr )
  122.             {
  123.                ( *lpfnIdStr )( lpCtlStyle->wId, (LPSTR)szID, sizeof(szID) );
  124.                SetDlgItemText( hDlg, 100, szID );
  125.             }
  126.             lstrcpy( lpCtlStyle->szClass, CLASSNAME );
  127.  
  128.             SetProp( hDlg, MAKEINTRESOURCE( 2 ), LOWORD( (DWORD)lpfnVerId ) );
  129.             SetProp( hDlg, MAKEINTRESOURCE( 3 ), HIWORD( (DWORD)lpfnVerId ) );
  130.  
  131.             GlobalUnlock( hCtlStyle );
  132.          }
  133.          else
  134.             EndDialog( hDlg, FALSE );
  135.  
  136.          return( TRUE );
  137.       }
  138.  
  139.       case WM_COMMAND:
  140.          if( wParam == IDCANCEL )
  141.          {
  142.             RemoveProp( hDlg, MAKEINTRESOURCE( 1 ) );
  143.             RemoveProp( hDlg, MAKEINTRESOURCE( 2 ) );
  144.             RemoveProp( hDlg, MAKEINTRESOURCE( 3 ) );
  145.             EndDialog( hDlg, FALSE );
  146.             return( TRUE );
  147.          }
  148.  
  149.          if( wParam == IDOK )
  150.          {
  151.             HANDLE hCtlStyle;
  152.             LPCTLSTYLE lpCtlStyle;
  153.             LPFNSTRTOID lpfnId;
  154.             char szID[ 20 ];
  155.  
  156.             hCtlStyle = GetProp( hDlg, MAKEINTRESOURCE( 1 ) );
  157.             lpCtlStyle = (LPCTLSTYLE)GlobalLock( hCtlStyle );
  158.             szID[ 0 ] = NULL;
  159.  
  160.             lpfnId = (LPFNSTRTOID)MAKELONG(
  161.                             GetProp( hDlg, MAKEINTRESOURCE( 2 ) ),
  162.                             GetProp( hDlg, MAKEINTRESOURCE( 3 ) ) );
  163.             if( lpfnId )
  164.             {
  165.                DWORD Result;
  166.  
  167.                GetDlgItemText( hDlg, 100, szID, sizeof(szID) );
  168.                Result = ( *lpfnId )( (LPSTR)szID );
  169.                if( ! (BOOL)Result )
  170.                {
  171.                   GlobalUnlock( hCtlStyle );
  172.                   break;
  173.                }
  174.                lpCtlStyle->wId = HIWORD( Result );
  175.             }
  176.             GlobalUnlock( hCtlStyle );
  177.             RemoveProp( hDlg, MAKEINTRESOURCE( 1 ) );
  178.             RemoveProp( hDlg, MAKEINTRESOURCE( 2 ) );
  179.             RemoveProp( hDlg, MAKEINTRESOURCE( 3 ) );
  180.             hLibData = hCtlStyle;
  181.             EndDialog( hDlg, TRUE );
  182.             return( TRUE );
  183.          }
  184.    }
  185.    return( FALSE );
  186. }
  187.  
  188.