123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- // XEdit.cpp : implementation file
- //
- #include "stdafx.h"
- #include "XEdit.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- UINT WM_XEDIT_KILL_FOCUS = ::RegisterWindowMessage(_T("WM_XEDIT_KILL_FOCUS"));
- UINT WM_XEDIT_VK_ESCAPE = ::RegisterWindowMessage(_T("WM_XEDIT_VK_ESCAPE"));
- ///////////////////////////////////////////////////////////////////////////////
- // message map
- BEGIN_MESSAGE_MAP(CXEdit, CEdit)
- //{{AFX_MSG_MAP(CXEdit)
- ON_WM_CHAR()
- ON_WM_CREATE()
- ON_WM_DESTROY()
- ON_WM_KILLFOCUS()
- ON_WM_PAINT()
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- ///////////////////////////////////////////////////////////////////////////////
- // ctor
- CXEdit::CXEdit(CWnd *pParent, LPCTSTR lpszText) :
- m_pParent(pParent),
- m_strText(lpszText),
- m_bMessageSent(FALSE)
- {
- XLISTCTRL_TRACE(_T("in CXEdit::CXEdit\n"));
- }
- ///////////////////////////////////////////////////////////////////////////////
- // dtor
- CXEdit::~CXEdit()
- {
- XLISTCTRL_TRACE(_T("in CXEdit::~CXEdit\n"));
- }
- ///////////////////////////////////////////////////////////////////////////////
- // SendRegisteredMessage
- void CXEdit::SendRegisteredMessage(UINT nMsg, WPARAM wParam /*= 0*/, LPARAM lParam /*= 0*/)
- {
- BOOL bMessageSent = m_bMessageSent;
- m_bMessageSent = TRUE;
- if (m_pParent && ::IsWindow(m_pParent->m_hWnd) && !bMessageSent)
- m_pParent->SendMessage(nMsg, wParam, lParam);
- }
- ///////////////////////////////////////////////////////////////////////////////
- // OnCreate
- int CXEdit::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- XLISTCTRL_TRACE(_T("in CXEdit::OnCreate\n"));
- if (CEdit::OnCreate(lpCreateStruct) == -1)
- return -1;
- // set the proper font
- if (!m_pParent)
- {
- m_pParent = GetParent();
- }
- if (m_pParent && ::IsWindow(m_pParent->m_hWnd))
- {
- CFont * pFont = m_pParent->GetFont();
- if (pFont)
- SetFont(pFont);
- }
- else
- {
- m_pParent = NULL;
- }
- SetWindowText(m_strText);
- SetSel(0, -1);
- SetFocus();
- SetCapture();
- return 0;
- }
- ///////////////////////////////////////////////////////////////////////////////
- // OnPaint
- void CXEdit::OnPaint()
- {
- CRect rect;
- GetClientRect(&rect);
- rect.right += 2;
- CDC * pDC = GetDC();
- pDC->FillSolidRect(&rect, ::GetSysColor(COLOR_WINDOW));
- ReleaseDC(pDC);
- CEdit::OnPaint(); // let CEdit draw the text
- //rect.right -= 2;
- rect.left -= 1;
- rect.top -= 1;
- rect.bottom -=1;
- pDC = GetDC();
- // don't erase the text that CEdit has just drawn
- CBrush * pOldBrush = (CBrush *) pDC->SelectStockObject(NULL_BRUSH);
- //CPen pen(PS_SOLID, 1, ::GetSysColor(COLOR_BTNSHADOW));
- CPen pen(PS_SOLID, 1, ::GetSysColor(COLOR_INACTIVECAPTION)); // same as combobox
- CPen *pOldPen = pDC->SelectObject(&pen);
- pDC->Rectangle(&rect);
- pDC->SelectObject(pOldPen);
- pDC->SelectObject(pOldBrush);
- ReleaseDC(pDC);
- }
- ///////////////////////////////////////////////////////////////////////////////
- // PreTranslateMessage
- BOOL CXEdit::PreTranslateMessage(MSG* pMsg)
- {
- // handle WM_KEYDOWN in case the edit has focus - otherwise
- // it will be sent to parent, bypassing WM_CHAR
- if (pMsg->message == WM_KEYDOWN)
- {
- if (pMsg->wParam == VK_RETURN)
- {
- SendRegisteredMessage(WM_XEDIT_KILL_FOCUS);
- return TRUE;
- }
- else if (pMsg->wParam == VK_ESCAPE)
- {
- SendRegisteredMessage(WM_XEDIT_VK_ESCAPE);
- return TRUE;
- }
- }
- return CEdit::PreTranslateMessage(pMsg);
- }
- ///////////////////////////////////////////////////////////////////////////////
- // OnChar
- void CXEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
- {
- // handle escape and return, in case edit does NOT have focus
- if (m_pParent)
- {
- if (nChar == VK_ESCAPE)
- {
- SendRegisteredMessage(WM_XEDIT_VK_ESCAPE);
- return;
- }
- else if (nChar == VK_RETURN)
- {
- SendRegisteredMessage(WM_XEDIT_KILL_FOCUS);
- return;
- }
- }
-
- CEdit::OnChar(nChar, nRepCnt, nFlags);
- }
- ///////////////////////////////////////////////////////////////////////////////
- // OnKillFocus
- void CXEdit::OnKillFocus(CWnd* pNewWnd)
- {
- CEdit::OnKillFocus(pNewWnd);
- SendRegisteredMessage(WM_XEDIT_KILL_FOCUS);
- }
- ///////////////////////////////////////////////////////////////////////////////
- // OnDestroy
- void CXEdit::OnDestroy()
- {
- XLISTCTRL_TRACE(_T("in CXEdit::OnDestroy\n"));
- ReleaseCapture();
- CEdit::OnDestroy();
- }
|