// PropTreeItemEdit.cpp : implementation file // // Copyright (C) 1998-2001 Scott Ramsay // sramsay@gonavi.com // http://www.gonavi.com // // This material is provided "as is", with absolutely no warranty expressed // or implied. Any use is at your own risk. // // Permission to use or copy this software for any purpose is hereby granted // without fee, provided the above notices are retained on all copies. // Permission to modify the code and to distribute modified code is granted, // provided the above notices are retained, and a notice that the code was // modified is included with the above copyright notice. // // If you use this code, drop me an email. I'd like to know if you find the code // useful. //#include "stdafx.h" #include "../../../idlib/precompiled.h" #pragma hdrstop #include "proptree.h" #include "PropTreeItemEdit.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPropTreeItemEdit CPropTreeItemEdit::CPropTreeItemEdit() : m_sEdit(_T("")), m_nFormat(ValueFormatText), m_bPassword(FALSE), m_fValue(0.0f) { } CPropTreeItemEdit::~CPropTreeItemEdit() { } BEGIN_MESSAGE_MAP(CPropTreeItemEdit, CEdit) //{{AFX_MSG_MAP(CPropTreeItemEdit) ON_WM_GETDLGCODE() ON_WM_KEYDOWN() ON_CONTROL_REFLECT(EN_KILLFOCUS, OnKillfocus) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPropTreeItemEdit message handlers void CPropTreeItemEdit::DrawAttribute(CDC* pDC, const RECT& rc) { ASSERT(m_pProp!=NULL); pDC->SelectObject(IsReadOnly() ? m_pProp->GetNormalFont() : m_pProp->GetBoldFont()); pDC->SetTextColor(RGB(0,0,0)); pDC->SetBkMode(TRANSPARENT); CRect r = rc; TCHAR ch; // can't use GetPasswordChar(), because window may not be created yet ch = (m_bPassword) ? '*' : '\0'; if (ch) { CString s; s = m_sEdit; for (LONG i=0; iDrawText(s, r, DT_SINGLELINE|DT_VCENTER); } else { pDC->DrawText(m_sEdit, r, DT_SINGLELINE|DT_VCENTER); } } void CPropTreeItemEdit::SetAsPassword(BOOL bPassword) { m_bPassword = bPassword; } void CPropTreeItemEdit::SetValueFormat(ValueFormat nFormat) { m_nFormat = nFormat; } LPARAM CPropTreeItemEdit::GetItemValue() { switch (m_nFormat) { case ValueFormatNumber: return _ttoi(m_sEdit); case ValueFormatFloatPointer: _stscanf(m_sEdit, _T("%f"), &m_fValue); return (LPARAM)&m_fValue; } return (LPARAM)(LPCTSTR)m_sEdit; } void CPropTreeItemEdit::SetItemValue(LPARAM lParam) { switch (m_nFormat) { case ValueFormatNumber: m_sEdit.Format(_T("%d"), lParam); return; case ValueFormatFloatPointer: { TCHAR tmp[MAX_PATH]; m_fValue = *(float*)lParam; _stprintf(tmp, _T("%f"), m_fValue); m_sEdit = tmp; } return; } if (lParam==0L) { TRACE0("CPropTreeItemEdit::SetItemValue - Invalid lParam value\n"); return; } m_sEdit = (LPCTSTR)lParam; } void CPropTreeItemEdit::OnMove() { if (IsWindow(m_hWnd)) SetWindowPos(NULL, m_rc.left, m_rc.top, m_rc.Width(), m_rc.Height(), SWP_NOZORDER|SWP_NOACTIVATE); } void CPropTreeItemEdit::OnRefresh() { if (IsWindow(m_hWnd)) SetWindowText(m_sEdit); } void CPropTreeItemEdit::OnCommit() { // hide edit control ShowWindow(SW_HIDE); // store edit text for GetItemValue GetWindowText(m_sEdit); } void CPropTreeItemEdit::OnActivate(int activateType, CPoint point) { // Check if the edit control needs creation if (!IsWindow(m_hWnd)) { DWORD dwStyle; dwStyle = WS_CHILD|ES_AUTOHSCROLL; Create(dwStyle, m_rc, m_pProp->GetCtrlParent(), GetCtrlID()); } SendMessage(WM_SETFONT, (WPARAM)m_pProp->GetNormalFont()->m_hObject); SetPasswordChar((TCHAR)(m_bPassword ? '*' : 0)); SetWindowText(m_sEdit); SetSel(0, -1); SetWindowPos(NULL, m_rc.left, m_rc.top, m_rc.Width(), m_rc.Height(), SWP_NOZORDER|SWP_SHOWWINDOW); SetFocus(); } UINT CPropTreeItemEdit::OnGetDlgCode() { return CEdit::OnGetDlgCode()|DLGC_WANTALLKEYS; } void CPropTreeItemEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if (nChar==VK_RETURN) CommitChanges(); CEdit::OnKeyDown(nChar, nRepCnt, nFlags); } void CPropTreeItemEdit::OnKillfocus() { CommitChanges(); }