/****************************/ /* Set extended button maps */ /****************************/ #include #include #include "wintab.h" #include "mgrtest.h" #include "resource.h" typedef struct { UINT wCsr; BYTE sysBtns[256]; BYTE logBtns[256]; } xBtn_info; static const unsigned nbitboxes = 32; static const int bitbox_id[] = { IDC_SYS_1, IDC_SYS_2, IDC_SYS_3, IDC_SYS_4, IDC_SYS_5, IDC_SYS_6, IDC_SYS_7, IDC_SYS_8, IDC_SYS_9, IDC_SYS_10, IDC_SYS_11, IDC_SYS_12, IDC_SYS_13, IDC_SYS_14, IDC_SYS_15, IDC_SYS_16, IDC_LOG_1, IDC_LOG_2, IDC_LOG_3, IDC_LOG_4, IDC_LOG_5, IDC_LOG_6, IDC_LOG_7, IDC_LOG_8, IDC_LOG_9, IDC_LOG_10, IDC_LOG_11, IDC_LOG_12, IDC_LOG_13, IDC_LOG_14, IDC_LOG_15, IDC_LOG_16 }; extern HANDLE hInst; void display_xButton_info( HWND hDlg, const xBtn_info * btn ) { unsigned i; for( i = 0; i < nbitboxes; i++ ) { unsigned j; char buf[100] = ""; for( j = 0; j < 16; j++ ) { char tmp[5]; sprintf( tmp, "%2x ", (int)*(btn->sysBtns + i*16 + j) ); strcat( buf, tmp ); } SetWindowText(GetDlgItem(hDlg, bitbox_id[i]), buf); } } BOOL CALLBACK valueProc( HWND hDlg, UINT Msg, WPARAM wParam, LONG lParam ) { BOOL fResult; int retval; switch( Msg ) { case WM_COMMAND: switch( wParam ) { case IDOK: retval = GetDlgItemInt( hDlg, IDC_EDIT, 0, TRUE ); EndDialog(hDlg, retval); fResult = TRUE; break; case IDCANCEL: EndDialog(hDlg, -1); fResult = TRUE; break; default: fResult = FALSE; } break; default: fResult = FALSE; } return fResult; } BOOL CALLBACK xButtonDlgProc( HWND hDlg, UINT Msg, WPARAM wParam, LONG lParam ) { static xBtn_info * btn; int i; BOOL fResult; switch( Msg ) { case WM_INITDIALOG: btn = (xBtn_info *)lParam; display_xButton_info( hDlg, btn ); fResult = TRUE; break; case WM_LBUTTONDOWN: /* Change the xBtn map */ i = test_bitboxes( hDlg, lParam, 16, nbitboxes, bitbox_id ); if( i > -1 ) { FARPROC lpProcDlg; int val; /* Open 'Enter Value' dialog */ lpProcDlg = MakeProcInstance( valueProc, hInst ); val = DialogBox( hInst, MAKEINTRESOURCE(IDD_VALUE), hDlg, lpProcDlg ); FreeProcInstance( lpProcDlg ); if( val >= 0 && val <= 0xff ) { *(btn->sysBtns + i) = val; display_xButton_info( hDlg, btn ); } else if( val != -1 ) MessageBox( hDlg, "Invalid value.", "MgrTest", MB_OK | MB_ICONHAND ); } fResult = TRUE; break; case WM_COMMAND: if (wParam == IDOK || wParam == IDCANCEL) { EndDialog(hDlg, wParam); fResult = TRUE; } else fResult = FALSE; break; default: fResult = FALSE; } return fResult; } void set_xBtnMap( HWND hWnd, HMGR hMgr ) { FARPROC lpProcDlg; xBtn_info info; unsigned i; int tag; /* Open a dialog to choose which cursor to use. */ lpProcDlg = MakeProcInstance( CursInfoDlgProc, hInst ); info.wCsr = DialogBoxParam( hInst, MAKEINTRESOURCE(IDD_INFOLIST), hWnd, lpProcDlg, WTI_CURSORS ); FreeProcInstance( lpProcDlg ); if( info.wCsr != 0xffffffff ) { /* Find xBtnMask info */ i = 0; while( WTInfo( WTI_EXTENSIONS + i, EXT_TAG, &tag ) && tag != WTX_XBTNMASK ) i++; if( tag != WTX_XBTNMASK ) MessageBox( hWnd, "XBTNMASK extension not supported.", "MgrTest", MB_ICONHAND | MB_OK ); /* Read the xBtn map info */ if( !WTInfo( WTI_EXTENSIONS + i, EXT_CURSORS + info.wCsr, info.sysBtns ) ) MessageBox( hWnd, "This cursor does not support XBTNMASK.", "MgrTest", MB_ICONHAND | MB_OK ); else { int id; /* Start the XBUTTONS dialog */ lpProcDlg = MakeProcInstance( xButtonDlgProc, hInst ); id = DialogBoxParam( hInst, MAKEINTRESOURCE(IDD_XBUTTONS), hWnd, lpProcDlg, (long)&info ); FreeProcInstance( lpProcDlg ); if( id == IDOK ) if( !WTMgrCsrExt( hMgr, info.wCsr, WTX_XBTNMASK, info.sysBtns ) ) MessageBox( hWnd, "WTMgrCsrExt failed.", "MgrTest", MB_ICONHAND | MB_OK ); } } }