bool WSetEditWindowFlags( HWND dlg, uint_16 flags ) { bool ok, is_virt; ok = (dlg != (HWND)NULL); if( ok ) { is_virt = ((flags & ACCEL_VIRTKEY) != 0); WSetVirtKey( dlg, is_virt ); if( is_virt ) { if( flags & ACCEL_CONTROL ) { CheckDlgButton( dlg, IDM_ACCEDCNTL, BST_CHECKED ); } else { CheckDlgButton( dlg, IDM_ACCEDCNTL, BST_UNCHECKED ); } if( flags & ACCEL_SHIFT ) { CheckDlgButton( dlg, IDM_ACCEDSHFT, BST_CHECKED ); } else { CheckDlgButton( dlg, IDM_ACCEDSHFT, BST_UNCHECKED ); } } if( flags & ACCEL_ALT ) { CheckDlgButton( dlg, IDM_ACCEDALT, BST_CHECKED ); } else { CheckDlgButton( dlg, IDM_ACCEDALT, BST_UNCHECKED ); } if( flags & ACCEL_NOINVERT ) { CheckDlgButton( dlg, IDM_ACCEDFLASH, BST_UNCHECKED ); } else { CheckDlgButton( dlg, IDM_ACCEDFLASH, BST_CHECKED ); } } return( ok ); }
WINEXPORT BOOL CALLBACK WAcccelEditProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam ) { WAccelEditInfo *einfo; HWND win; RECT r; POINT p; BOOL ret; WORD wp; WORD cmd; ret = FALSE; einfo = (WAccelEditInfo *)GET_DLGDATA( hDlg ); switch( message ) { case WM_INITDIALOG: einfo = (WAccelEditInfo *)lParam; einfo->edit_dlg = hDlg; SET_DLGDATA( hDlg, einfo ); WRAddSymbolsToComboBox( einfo->info->symbol_table, hDlg, IDM_ACCEDCMDID, WR_HASHENTRY_ALL ); ret = TRUE; break; case WM_SYSCOLORCHANGE: WCtl3dColorChange(); break; #if 0 #ifdef __NT__ case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORMSGBOX: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: #else case WM_CTLCOLOR: #endif return( WCtl3dCtlColorEx( message, wParam, lParam ) ); #endif case WM_LBUTTONDBLCLK: case WM_RBUTTONDBLCLK: case WM_RBUTTONUP: MAKE_POINT( p, lParam ); win = GetDlgItem( hDlg, IDM_ACCEDRNAME ); GetClientRect( win, &r ); MapWindowPoints( win, hDlg, (POINT *)&r, 2 ); if( PtInRect( &r, p ) ) { WHandleRename( einfo ); } ret = TRUE; break; #if 0 case WM_PARENTNOTIFY: cmd = GET_WM_PARENTNOTIFY_EVENT( wParam, lParam ); switch( cmd ) { case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: MAKE_POINT( p, lParam ); win = GetDlgItem( hDlg, IDM_ACCEDLIST ); GetWindowRect( win, &r ); MapWindowPoints( HWND_DESKTOP, hDlg, (POINT *)&r, 2 ); if( PtInRect( &r, p ) ) { WHandleSelChange( einfo ); } break; } ret = TRUE; break; #endif case WM_COMMAND: wp = LOWORD( wParam ); cmd = GET_WM_COMMAND_CMD( wParam, lParam ); switch( wp ) { case IDM_ACCEDINSERT: WInsertAccelEntry( einfo ); break; case IDM_ACCEDCHANGE: WHandleChange( einfo ); break; case IDM_ACCEDRESET: WDoHandleSelChange( einfo, FALSE, TRUE ); break; case IDM_ACCEDSETACC: if( einfo->tbl != NULL && einfo->tbl->num != 0 ) { WHandleSelChange( einfo ); } else { WInsertAccelEntry( einfo ); } break; #if 0 case IDM_ACCEDCMDID: if( cmd == CBN_SELCHANGE ) { einfo->combo_change = TRUE; WHandleSelChange( einfo ); einfo->combo_change = FALSE; } break; #endif case IDM_ACCEDLIST: if( cmd == LBN_SELCHANGE ) { WHandleSelChange( einfo ); } break; case IDM_ACCEDVIRT: case IDM_ACCEDASCII: if( cmd == BN_CLICKED ) { WSetVirtKey( hDlg, wp == IDM_ACCEDVIRT ); } break; } break; } return( ret ); }
void WSetKey( WAccelEditInfo *einfo, BYTE scan_code ) { bool cntl; bool shift; bool alt; char *str; char scan_key; uint_16 key; uint_16 skey; bool is_virt; BYTE kbstate[256]; int ta_ret; #ifdef __NT__ WORD ta_key; #else DWORD ta_key; #endif if( einfo == NULL ) { return; } is_virt = TRUE; key = einfo->key_info.key; skey = WMapShiftedKeyToKey( key ); GetKeyboardState( kbstate ); cntl = (kbstate[VK_CONTROL] & 0x0080) != 0; shift = (kbstate[VK_SHIFT] & 0x0080) != 0; alt = (kbstate[VK_MENU] & 0x0080) != 0; str = WGetVKeyFromID( key ); if( str == NULL ) { // I am assumming that they key must be alphanumeric // as WGetVKeyFromID( key ) would filter out all others if( isalpha( key ) ) { if( alt ) { str = WGetASCIIVKText( key ); } else { if( cntl ) { key = toupper( key ) - '@'; } else { if( !shift ) { key = tolower( key ); } } str = WGetASCIIKeyText( key ); is_virt = FALSE; } } else if( isdigit( key ) ) { if( alt || cntl ) { str = WGetASCIIVKText( key ); } else { if( shift ) { key = WMapKeyToShiftedKey( key ); } str = WGetASCIIKeyText( key ); is_virt = FALSE; } } else if( isdigit( skey ) ) { str = WGetASCIIVKText( skey ); // The remaining keys are the ones where we did not get a // virtual key we could translate, an alpha-numeric key, // a shifted 0-9 ( ie !@#$%^&*() ). // The ToAscii function handles everything except the following // keys where cntl is pressed. These keys are `-=[]\;',./ // So, I throw up my hands in defeat and add a special case } else if( cntl && (scan_key = WMapScanCodeToKey( scan_code )) != 0 ) { str = WGetASCIIKeyText( scan_key ); } else { ta_ret = ToAscii( key, scan_code, kbstate, &ta_key, 0 ); if( ta_ret ) { if( shift ) { ta_key = WMapShiftedKeyToKey( ta_key ); } str = WGetASCIIKeyText( ta_key ); } } } WSetEditWithStr( GetDlgItem( einfo->edit_dlg, IDM_ACCEDKEY ), str ); WSetVirtKey( einfo->edit_dlg, is_virt ); if( is_virt ) { CheckDlgButton( einfo->edit_dlg, IDM_ACCEDALT, ( alt ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( einfo->edit_dlg, IDM_ACCEDCNTL, ( cntl ) ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( einfo->edit_dlg, IDM_ACCEDSHFT, ( shift ) ? BST_CHECKED : BST_UNCHECKED ); } }