今天終于把BackSpace鍵刪除不了Text
Input里面字符的問題給解決了,發現原因是沒處理WM_KEYDOWN和WM_KEYUP
就是這幾行,呵呵,這是GamebryoGFxApp里面的,拿過來用就好了
// Pass windows key messages to GFx
case WM_KEYDOWN:
case WM_KEYUP:
{
GFxKey::Code eKeyCode = GFxKey::VoidSymbol;
WPARAM wCharCode = pkEventRecord->wParam;
if (wCharCode >= 'A' && wCharCode <= 'Z')
{
eKeyCode = (GFxKey::Code) ((wCharCode - 'A') +
GFxKey::A);
}
else if (wCharCode >= VK_F1 && wCharCode <= VK_F15)
{
eKeyCode = (GFxKey::Code) ((wCharCode - VK_F1) +
GFxKey::F1);
}
else if (wCharCode >= '0' && wCharCode <= '9')
{
eKeyCode = (GFxKey::Code) ((wCharCode - '0') +
GFxKey::Num0);
}
else if (wCharCode >= VK_NUMPAD0 && wCharCode <= VK_DIVIDE)
{
eKeyCode = (GFxKey::Code) ((wCharCode - VK_NUMPAD0) +
GFxKey::KP_0);
}
else
{
for (int i = 0; KeyCodeMap[i].winKey != 0; i++)
{
if (wCharCode == (UInt)KeyCodeMap[i].winKey)
{
eKeyCode = KeyCodeMap[i].appKey;
break;
}
}
}
unsigned char asciiCode = 0;
if (eKeyCode != GFxKey::VoidSymbol)
{
// get the ASCII code, if possible.
UINT uScanCode =
((UINT)pkEventRecord->lParam >> 16) & 0xFF;
BYTE ks[256];
WORD charCode;
// Get the current keyboard state
::GetKeyboardState(ks);
if (::ToAscii((UINT)wCharCode, uScanCode, ks, &charCode, 0)
> 0)
{
asciiCode = LOBYTE (charCode);
}
}
GFxEvent::EventType eEventType = GFxEvent::KeyUp;
if (pkEventRecord->uiMsg == WM_KEYDOWN)
eEventType = GFxEvent::KeyDown;
// Send the key event into the Scaleform movie
GFxKeyEvent kEvent(eEventType, eKeyCode, asciiCode, 0);
m_spGFxManager->HandleInputEvent(kEvent);
KeyCodeMap
static struct
{
WPARAM winKey;
GFxKey::Code appKey;
} KeyCodeMap[] =
{
{VK_BACK, GFxKey::Backspace},
{VK_TAB, GFxKey::Tab},
{VK_CLEAR, GFxKey::Clear},
{VK_RETURN, GFxKey::Return},
{VK_SHIFT, GFxKey::Shift},
{VK_CONTROL, GFxKey::Control},
{VK_MENU, GFxKey::Alt},
{VK_PAUSE, GFxKey::Pause},
{VK_CAPITAL, GFxKey::CapsLock},
{VK_ESCAPE, GFxKey::Escape},
{VK_SPACE, GFxKey::Space},
{VK_PRIOR, GFxKey::PageUp},
{VK_NEXT, GFxKey::PageDown},
{VK_END, GFxKey::End},
{VK_HOME, GFxKey::Home},
{VK_LEFT, GFxKey::Left},
{VK_UP, GFxKey::Up},
{VK_RIGHT, GFxKey::Right},
{VK_DOWN, GFxKey::Down},
{VK_INSERT, GFxKey::Insert},
{VK_DELETE, GFxKey::Delete},
{VK_HELP, GFxKey::Help},
{VK_NUMLOCK, GFxKey::NumLock},
{VK_SCROLL, GFxKey::ScrollLock},
{VK_OEM_1, GFxKey::Semicolon},
{VK_OEM_PLUS, GFxKey::Equal},
{VK_OEM_COMMA, GFxKey::Comma},
{VK_OEM_MINUS, GFxKey::Minus},
{VK_OEM_PERIOD,GFxKey::Period},
{VK_OEM_2, GFxKey::Slash},
{VK_OEM_3, GFxKey::Bar},
{VK_OEM_4, GFxKey::BracketLeft},
{VK_OEM_5, GFxKey::Backslash},
{VK_OEM_6, GFxKey::BracketRight},
{VK_OEM_7, GFxKey::Quote}
};
就是這么個小問題,我好幾天沒解決了,一直盯著WM_CHAR看,就是沒看出什么問題來,然后就以為是要在flash文件里做什么特殊設置呢,我靠!flash不熟悉真是痛苦!
我要繼續我的痛苦旅程,不經歷痛苦就體驗不到真正的快樂啊!嘿嘿,問題解決了好爽!
目前整合GFx的工作指導方針如下,因為大的架構已經建立起來了,剩下的就是一些完善工作了:
逢山開路,遇水搭橋,不能追求一步到位,開始用GFx打通流程,在做的過程中逐步完善
下一個待解決的問題:
Q:
如何設置或判斷flash里面某個component的focus?因為我要在密碼輸入框有focus的時候逐字符加密,防止被某些同學盜號……
A: 我要在c++中設置或判斷,所以用
GFxMovieView::Invoke Button_Login.Focus?
【2008-10-6】今天用Selection.getFocus()老返回null,沒搞清楚原因;Selection.setFocus()倒是好用。類似這種問題太多了,值不值得花費這么多時間在這個東西上?還是研究如何用在場景里吧!這個跟Flash本身沒啥關系,不用研究Flash里面的東西。
posted on 2008-10-03 17:40
七星重劍 閱讀(1798)
評論(1) 編輯 收藏 引用 所屬分類:
Flash Scaleform GFx