2007-10-30 19:04:22 +00:00
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// 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
|
2007-11-14 12:28:27 +00:00
|
|
|
BOOL CKeyboardEdit::PreTranslateMessage (MSG* pMsg)
|
2007-10-30 19:04:22 +00:00
|
|
|
{
|
|
|
|
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;
|
|
|
|
}
|
2007-11-14 12:28:27 +00:00
|
|
|
|
2007-10-30 19:04:22 +00:00
|
|
|
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;
|
2007-11-14 12:28:27 +00:00
|
|
|
|
2007-10-30 19:04:22 +00:00
|
|
|
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;
|
2007-11-14 12:28:27 +00:00
|
|
|
|
2007-10-30 19:04:22 +00:00
|
|
|
wVirtKey = m_wVirtKey;
|
|
|
|
bAlt = m_bAltPressed;
|
|
|
|
bCtrl = m_bCtrlPressed;
|
|
|
|
bShift = m_bShiftPressed;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|