visualboyadvance-m/src/win32/KeyboardEdit.cpp

149 lines
3.9 KiB
C++

////////////////////////////////////////////////////////////////////////////////
// Copyright (C) 1998 by Thierry Maurel
// All rights reserved
//
// Distribute freely, except: don't remove my name from the source or
// documentation (don't take credit for my work), mark your changes (don't
// get me blamed for your possible bugs), don't alter or remove this
// notice.
// No warrantee of any kind, express or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
//
// Send bug reports, bug fixes, enhancements, requests, flames, etc., and
// I'll try to keep a version up to date. I can be reached as follows:
// tmaurel@caramail.com (or tmaurel@hol.fr)
//
////////////////////////////////////////////////////////////////////////////////
// File : KeyboardEdit.cpp
// Project : AccelsEditor
////////////////////////////////////////////////////////////////////////////////
// Version : 1.0 * Authors : A.Lebatard + T.Maurel
// Date : 17.08.98
//
// Remarks : implementation file
//
////////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "KeyboardEdit.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern TCHAR* mapVirtKeysStringFromWORD(WORD wKey);
/////////////////////////////////////////////////////////////////////////////
// CKeyboardEdit
CKeyboardEdit::CKeyboardEdit()
{
m_bKeyDefined = false;
ResetKey ();
}
CKeyboardEdit::~CKeyboardEdit()
{
}
BEGIN_MESSAGE_MAP(CKeyboardEdit, CEdit)
//{{AFX_MSG_MAP(CKeyboardEdit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#pragma warning( disable : 4706 )
/////////////////////////////////////////////////////////////////////////////
// CKeyboardEdit message handlers
BOOL CKeyboardEdit::PreTranslateMessage (MSG* pMsg)
{
bool bPressed;
if ((bPressed = (pMsg->message == WM_KEYDOWN)) || pMsg->message == WM_KEYUP || (bPressed = (pMsg->message == WM_SYSKEYDOWN)) || pMsg->message == WM_SYSKEYUP) {
if (bPressed && m_bKeyDefined && !((1 << 30) & pMsg->lParam))
ResetKey ();
if (pMsg->wParam == VK_SHIFT && !m_bKeyDefined)
m_bShiftPressed = bPressed;
else if (pMsg->wParam == VK_CONTROL &&!m_bKeyDefined) {
m_bCtrlPressed = bPressed;
}
else if (pMsg->wParam == VK_MENU && !m_bKeyDefined)
m_bAltPressed = bPressed;
else {
if (!m_bKeyDefined) {
m_wVirtKey = (WORD)pMsg->wParam;
if (bPressed)
m_bKeyDefined = true;
}
}
DisplayKeyboardString ();
return TRUE;
}
return CEdit::PreTranslateMessage(pMsg);
}
#pragma warning( default : 4706 )
////////////////////////////////////////////////////////////////////////
//
void CKeyboardEdit::DisplayKeyboardString()
{
CString strKbd;
// modifiers
if (m_bCtrlPressed)
strKbd = "Ctrl";
if (m_bAltPressed) {
if (strKbd.GetLength () > 0)
strKbd += '+';
strKbd += "Alt";
}
if (m_bShiftPressed) {
if (strKbd.GetLength () > 0)
strKbd += '+';
strKbd += "Shift";
}
// virtual key
LPCTSTR szVirtKey = mapVirtKeysStringFromWORD(m_wVirtKey);
if (szVirtKey != NULL) {
if (strKbd.GetLength () > 0)
strKbd += '+';
strKbd += szVirtKey;
}
SetWindowText (strKbd);
}
////////////////////////////////////////////////////////////////////////
//
void CKeyboardEdit::ResetKey ()
{
m_wVirtKey = 0;
m_bCtrlPressed = false;
m_bAltPressed = false;
m_bShiftPressed = false;
m_bKeyDefined = false;
if(m_hWnd != NULL)
SetWindowText(_T(""));
}
////////////////////////////////////////////////////////////////////////
//
bool CKeyboardEdit::GetAccelKey(WORD& wVirtKey, bool& bCtrl, bool& bAlt, bool& bShift)
{
if (!m_bKeyDefined)
return false;
wVirtKey = m_wVirtKey;
bAlt = m_bAltPressed;
bCtrl = m_bCtrlPressed;
bShift = m_bShiftPressed;
return true;
}