int KUiESCDlg::OnKeyDown(unsigned int uKey) { int nRet = 1; KWndButton* pActive = NULL; KWndButton* pToActive = NULL; if (uKey == VK_RETURN) { if (pActive = GetActiveBtn()) OnClickButton(pActive); } else if (uKey == VK_ESCAPE) CloseWindow(false); else if (uKey == VK_UP) { pActive = GetActiveBtn(); if (pActive == &m_ExitGameBtn) pToActive = &m_ContinueGameBtn; //else if (pActive == &m_ExitBtn) // pToActive = &m_ExitGameBtn; else if (pActive == &m_HelpBtn) pToActive = &m_ExitGameBtn; //else if (pActive == &m_TaskBtn) // pToActive = &m_HelpBtn; else if (pActive == &m_OptionsBtn) pToActive = &m_HelpBtn; else if (pActive == &m_ContinueGameBtn) pToActive = &m_OptionsBtn; else pToActive = &m_ExitGameBtn; } else if (uKey == VK_DOWN) { pActive = GetActiveBtn(); if (pActive == &m_ExitGameBtn) pToActive = &m_HelpBtn; //else if (pActive == &m_ExitBtn) // pToActive = &m_HelpBtn; else if (pActive == &m_HelpBtn) pToActive = &m_OptionsBtn; //else if (pActive == &m_TaskBtn) // pToActive = &m_OptionsBtn; else if (pActive == &m_OptionsBtn) pToActive = &m_ContinueGameBtn; else if (pActive == &m_ContinueGameBtn) pToActive = &m_ExitGameBtn; else pToActive = &m_ExitGameBtn; } else nRet = 0; if (pToActive) { POINT Pos; SIZE Size; pToActive->GetAbsolutePos((int*)&Pos.x, (int*)&Pos.y); pToActive->GetSize((int*)&Size.cx, (int*)&Size.cy); Pos.x += Size.cx / 2; Pos.y += Size.cy / 2; Wnd_SetCursorPos(Pos.x, Pos.y); } return nRet; }
void KUiLogin::OnKeyDown(unsigned int uKey) { if (uKey == VK_RETURN) { if (m_Cancel.IsButtonActive()) OnCancel(); else OnLogin(); } else if (uKey == VK_TAB) { if ((GetKeyState(VK_SHIFT) & 0x8000) == 0) { // 如果没有按住Shift if (m_InvisibleLogin.IsButtonActive()) m_Login.SetCursorAbove(); else if (m_Login.IsButtonActive()) m_RememberAccount.SetCursorAbove(); else if (m_RememberAccount.IsButtonActive()) m_Cancel.SetCursorAbove(); else { int x, y, cx; m_Account.GetAbsolutePos(&x, &y); m_Account.GetSize(&cx, NULL); Wnd_SetCursorPos(x + cx, y); Wnd_SetFocusWnd(&m_Account); } } else { // 如果按住Shift if (m_InvisibleLogin.IsButtonActive()) { int x, y, cx; m_PassWord.GetAbsolutePos(&x, &y); m_PassWord.GetSize(&cx, NULL); Wnd_SetCursorPos(x + cx, y); Wnd_SetFocusWnd(&m_PassWord); } else if (m_Login.IsButtonActive()) { m_InvisibleLogin.SetCursorAbove(); } else if (m_RememberAccount.IsButtonActive()) { m_Login.SetCursorAbove(); } else // if m_Cancel.IsButtonActive() { m_RememberAccount.SetCursorAbove(); } } } else if (uKey == VK_SPACE) { if (m_Login.IsButtonActive()) OnLogin(); else if (m_Cancel.IsButtonActive()) OnCancel(); else if (m_RememberAccount.IsButtonActive()) m_RememberAccount.CheckButton(!m_RememberAccount.IsButtonChecked()); else if (m_InvisibleLogin.IsButtonActive()) m_InvisibleLogin.CheckButton(!m_InvisibleLogin.IsButtonChecked()); } else if (uKey == VK_LEFT) m_Login.SetCursorAbove(); else if (uKey == VK_RIGHT) m_Cancel.SetCursorAbove(); else if (uKey == VK_ESCAPE) OnCancel(); }
//使鼠标指针以移动到悬浮在此窗口中的位置上 void KWndWindow::SetCursorAbove() { Wnd_SetCursorPos(m_nAbsoluteLeft + m_Width / 2, m_nAbsoluteTop + m_Height / 2); }
//-------------------------------------------------------------------------- // 功能:窗口函数 //-------------------------------------------------------------------------- int KUiLogin::WndProc(unsigned int uMsg, unsigned int uParam, int nParam) { int nRet = 0; switch(uMsg) { case WND_N_BUTTON_CLICK: if (uParam == (unsigned int)(KWndWindow*)&m_Login) OnLogin(); else if (uParam == (unsigned int)(KWndWindow*)&m_Cancel) OnCancel(); break; case WND_N_EDIT_SPECIAL_KEY_DOWN: if (nParam == VK_TAB) { if ((GetKeyState(VK_SHIFT) & 0x8000) == 0) { // 如果没有按住Shift if (uParam == (unsigned int)(KWndWindow*)&m_Account) { int x, y, cx; m_PassWord.GetAbsolutePos(&x, &y); m_PassWord.GetSize(&cx, NULL); Wnd_SetCursorPos(x + cx, y); Wnd_SetFocusWnd(&m_PassWord); nRet = 1; } else if (uParam == (unsigned int)(KWndWindow*)&m_PassWord) { Wnd_SetFocusWnd(NULL); m_InvisibleLogin.SetCursorAbove(); nRet = 1; } } else { // 如果按住Shift if (uParam == (unsigned int)(KWndWindow*)&m_Account) { Wnd_SetFocusWnd(NULL); m_Cancel.SetCursorAbove(); nRet = 1; } else if (uParam == (unsigned int)(KWndWindow*)&m_PassWord) { int x, y, cx; m_Account.GetAbsolutePos(&x, &y); m_Account.GetSize(&cx, NULL); Wnd_SetCursorPos(x + cx, y); Wnd_SetFocusWnd(&m_Account); nRet = 1; } } } else if (nParam == VK_RETURN) { if (uParam == (unsigned int)(KWndWindow*)&m_Account) { Wnd_SetFocusWnd(&m_PassWord); nRet = 1; } else if (uParam == (unsigned int)(KWndWindow*)&m_PassWord) { OnLogin(); nRet = 1; } } else if (nParam == VK_ESCAPE) { OnCancel(); nRet = 1; } break; case WM_KEYDOWN: OnKeyDown(uParam); nRet = 1; break; case WM_SYSKEYDOWN: if (uParam == 'A') OnEnableAutoLogin(); break; case WND_N_EDIT_CHANGE: if(uParam == (unsigned int)(&m_Account)) { char szBuffer[32]; m_Account.GetText(szBuffer, sizeof(szBuffer), true); g_LoginLogic.SetLoginAccount(szBuffer); g_LoginLogic.LoadAccountSetting(); m_InvisibleLogin.CheckButton(g_LoginLogic.IsInvisibleLogin()); } break; default: nRet = KWndShowAnimate::WndProc(uMsg, uParam, nParam); break; } return nRet; }