home *** CD-ROM | disk | FTP | other *** search
- ////////////////////////////////////////////////////////////////////////////////
- // 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;
- }
-
-