📄 app.cpp
字号:
break; case kEnterCharCode : retval = WXK_RETURN; break; case kEndCharCode : retval = WXK_END; break; case kHelpCharCode : retval = WXK_HELP; break; case kBackspaceCharCode : retval = WXK_BACK; break; case kTabCharCode : retval = WXK_TAB; break; case kPageUpCharCode : retval = WXK_PAGEUP; break; case kPageDownCharCode : retval = WXK_PAGEDOWN; break; case kReturnCharCode : retval = WXK_RETURN; break; case kFunctionKeyCharCode : { switch ( code ) { case 0x7a : retval = WXK_F1 ; break; case 0x78 : retval = WXK_F2 ; break; case 0x63 : retval = WXK_F3 ; break; case 0x76 : retval = WXK_F4 ; break; case 0x60 : retval = WXK_F5 ; break; case 0x61 : retval = WXK_F6 ; break; case 0x62: retval = WXK_F7 ; break; case 0x64 : retval = WXK_F8 ; break; case 0x65 : retval = WXK_F9 ; break; case 0x6D : retval = WXK_F10 ; break; case 0x67 : retval = WXK_F11 ; break; case 0x6F : retval = WXK_F12 ; break; case 0x69 : retval = WXK_F13 ; break; case 0x6B : retval = WXK_F14 ; break; case 0x71 : retval = WXK_F15 ; break; default: break; } } break ; case kEscapeCharCode : retval = WXK_ESCAPE ; break ; case kLeftArrowCharCode : retval = WXK_LEFT ; break ; case kRightArrowCharCode : retval = WXK_RIGHT ; break ; case kUpArrowCharCode : retval = WXK_UP ; break ; case kDownArrowCharCode : retval = WXK_DOWN ; break ; case kDeleteCharCode : retval = WXK_DELETE ; break ; default: break ; } // end switch return retval;}int wxMacKeyCodeToModifier(wxKeyCode key){ switch (key) { case WXK_START: case WXK_MENU: return cmdKey; case WXK_SHIFT: return shiftKey; case WXK_CAPITAL: return alphaLock; case WXK_ALT: return optionKey; case WXK_CONTROL: return controlKey; default: return 0; }}#ifndef __DARWIN__bool wxGetKeyState(wxKeyCode key) //virtual key code if < 10.2.x, else see below{ wxASSERT_MSG(key != WXK_LBUTTON && key != WXK_RBUTTON && key != WXK_MBUTTON, wxT("can't use wxGetKeyState() for mouse buttons"));//if OS X > 10.2 (i.e. 10.2.x)//a known apple bug prevents the system from determining led//states with GetKeys... can only determine caps lock led return !!(GetCurrentKeyModifiers() & wxMacKeyCodeToModifier(key));//else// KeyMapByteArray keymap;// GetKeys((BigEndianLong*)keymap);// return !!(BitTst(keymap, (sizeof(KeyMapByteArray)*8) - iKey));}#endifwxMouseState wxGetMouseState(){ wxMouseState ms; wxPoint pt = wxGetMousePosition(); ms.SetX(pt.x); ms.SetY(pt.y);#if TARGET_API_MAC_OSX UInt32 buttons = GetCurrentButtonState(); ms.SetLeftDown( (buttons & 0x01) != 0 ); ms.SetMiddleDown( (buttons & 0x04) != 0 ); ms.SetRightDown( (buttons & 0x02) != 0 );#else ms.SetLeftDown( Button() ); ms.SetMiddleDown( 0 ); ms.SetRightDown( 0 );#endif UInt32 modifiers = GetCurrentKeyModifiers(); ms.SetControlDown(modifiers & controlKey); ms.SetShiftDown(modifiers & shiftKey); ms.SetAltDown(modifiers & optionKey); ms.SetMetaDown(modifiers & cmdKey); return ms;}// TODO : once the new key/char handling is tested, move all the code to wxWindowbool wxApp::MacSendKeyDownEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ){ if ( !focus ) return false ; bool handled; wxKeyEvent event(wxEVT_KEY_DOWN) ; MacCreateKeyEvent( event, focus , keymessage , modifiers , when , wherex , wherey , uniChar ) ; handled = focus->GetEventHandler()->ProcessEvent( event ) ; if ( handled && event.GetSkipped() ) handled = false ;#if wxUSE_ACCEL if ( !handled ) { wxWindow *ancestor = focus; while (ancestor) { int command = ancestor->GetAcceleratorTable()->GetCommand( event ); if (command != -1) { wxCommandEvent command_event( wxEVT_COMMAND_MENU_SELECTED, command ); handled = ancestor->GetEventHandler()->ProcessEvent( command_event ); break; } if (ancestor->IsTopLevel()) break; ancestor = ancestor->GetParent(); } }#endif // wxUSE_ACCEL return handled ;}bool wxApp::MacSendKeyUpEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ){ if ( !focus ) return false ; bool handled; wxKeyEvent event( wxEVT_KEY_UP ) ; MacCreateKeyEvent( event, focus , keymessage , modifiers , when , wherex , wherey , uniChar ) ; handled = focus->GetEventHandler()->ProcessEvent( event ) ; return handled ;}bool wxApp::MacSendCharEvent( wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ){ if ( !focus ) return false ; wxKeyEvent event(wxEVT_CHAR) ; MacCreateKeyEvent( event, focus , keymessage , modifiers , when , wherex , wherey , uniChar ) ; long keyval = event.m_keyCode ; bool handled = false ; wxTopLevelWindowMac *tlw = focus->MacGetTopLevelWindow() ; if (tlw) { event.SetEventType( wxEVT_CHAR_HOOK ); handled = tlw->GetEventHandler()->ProcessEvent( event ); if ( handled && event.GetSkipped() ) handled = false ; } if ( !handled ) { event.SetEventType( wxEVT_CHAR ); event.Skip( false ) ; handled = focus->GetEventHandler()->ProcessEvent( event ) ; } if ( !handled && (keyval == WXK_TAB) ) { wxWindow* iter = focus->GetParent() ; while ( iter && !handled ) { if ( iter->HasFlag( wxTAB_TRAVERSAL ) ) { wxNavigationKeyEvent new_event; new_event.SetEventObject( focus ); new_event.SetDirection( !event.ShiftDown() ); /* CTRL-TAB changes the (parent) window, i.e. switch notebook page */ new_event.SetWindowChange( event.ControlDown() ); new_event.SetCurrentFocus( focus ); handled = focus->GetParent()->GetEventHandler()->ProcessEvent( new_event ); if ( handled && new_event.GetSkipped() ) handled = false ; } iter = iter->GetParent() ; } } // backdoor handler for default return and command escape if ( !handled && (!focus->IsKindOf(CLASSINFO(wxControl) ) || !focus->MacCanFocus() ) ) { // if window is not having a focus still testing for default enter or cancel // TODO: add the UMA version for ActiveNonFloatingWindow wxWindow* focus = wxFindWinFromMacWindow( FrontWindow() ) ; if ( focus ) { if ( keyval == WXK_RETURN ) { wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent(focus), wxTopLevelWindow); if ( tlw && tlw->GetDefaultItem() ) { wxButton *def = wxDynamicCast(tlw->GetDefaultItem(), wxButton); if ( def && def->IsEnabled() ) { wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, def->GetId() ); event.SetEventObject(def); def->Command(event); return true ; } } } else if (keyval == WXK_ESCAPE || (keyval == '.' && modifiers & cmdKey ) ) { // generate wxID_CANCEL if command-. or <esc> has been pressed (typically in dialogs) wxCommandEvent new_event(wxEVT_COMMAND_BUTTON_CLICKED,wxID_CANCEL); new_event.SetEventObject( focus ); handled = focus->GetEventHandler()->ProcessEvent( new_event ); } } } return handled ;}// This method handles common code for SendKeyDown, SendKeyUp, and SendChar events.void wxApp::MacCreateKeyEvent( wxKeyEvent& event, wxWindow* focus , long keymessage , long modifiers , long when , short wherex , short wherey , wxChar uniChar ){ short keycode, keychar ; keychar = short(keymessage & charCodeMask); keycode = short(keymessage & keyCodeMask) >> 8 ; if ( !(event.GetEventType() == wxEVT_CHAR) && (modifiers & (controlKey | shiftKey | optionKey) ) ) { // control interferes with some built-in keys like pgdown, return etc. therefore we remove the controlKey modifier // and look at the character after UInt32 state = 0; UInt32 keyInfo = KeyTranslate((Ptr)GetScriptManagerVariable(smKCHRCache), ( modifiers & (~(controlKey | shiftKey | optionKey))) | keycode, &state); keychar = short(keyInfo & charCodeMask); } long keyval = wxMacTranslateKey(keychar, keycode) ; if ( keyval == keychar && ( event.GetEventType() == wxEVT_KEY_UP || event.GetEventType() == wxEVT_KEY_DOWN ) ) keyval = wxToupper( keyval ) ; // Check for NUMPAD keys if (keyval >= '0' && keyval <= '9' && keycode >= 82 && keycode <= 92) { keyval = (keyval - '0') + WXK_NUMPAD0; } else if (keycode >= 67 && keycode <= 81) { switch (keycode) { case 76 : keyval = WXK_NUMPAD_ENTER; break; case 81: keyval = WXK_NUMPAD_EQUAL; break; case 67: keyval = WXK_NUMPAD_MULTIPLY; break; case 75: keyval = WXK_NUMPAD_DIVIDE; break; case 78: keyval = WXK_NUMPAD_SUBTRACT; break; case 69: keyval = WXK_NUMPAD_ADD; break; case 65: keyval = WXK_NUMPAD_DECIMAL; break; default: break; } // end switch } event.m_shiftDown = modifiers & shiftKey; event.m_controlDown = modifiers & controlKey; event.m_altDown = modifiers & optionKey; event.m_metaDown = modifiers & cmdKey; event.m_keyCode = keyval ;#if wxUSE_UNICODE event.m_uniChar = uniChar ;#endif event.m_rawCode = keymessage; event.m_rawFlags = modifiers; event.m_x = wherex; event.m_y = wherey; event.SetTimestamp(when); event.SetEventObject(focus);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -