📄 bcgpproplist.cpp
字号:
case VT_DATE:
break;
default:
break;
}
return NULL;
}
//*****************************************************************************
CSpinButtonCtrl* CBCGPProp::CreateSpinControl (CRect rectSpin)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndList);
CSpinButtonCtrl* pWndSpin = new CSpinButtonCtrl;
if (!pWndSpin->Create (
WS_CHILD | WS_VISIBLE | UDS_ARROWKEYS | UDS_SETBUDDYINT | UDS_NOTHOUSANDS,
rectSpin, m_pWndList, BCGPROPLIST_ID_INPLACE))
{
return NULL;
}
pWndSpin->SetBuddy (m_pWndInPlace);
if (m_nMinValue != 0 || m_nMaxValue != 0)
{
pWndSpin->SetRange32 (m_nMinValue, m_nMaxValue);
}
return pWndSpin;
}
//*****************************************************************************
BOOL CBCGPProp::OnEndEdit ()
{
ASSERT_VALID (this);
m_bInPlaceEdit = FALSE;
OnDestroyWindow ();
return TRUE;
}
//*****************************************************************************************
CComboBox* CBCGPProp::CreateCombo (CWnd* pWndParent, CRect rect)
{
ASSERT_VALID (this);
rect.bottom = rect.top + 400;
CComboBox* pWndCombo = new CComboBox;
if (!pWndCombo->Create (WS_CHILD | CBS_NOINTEGRALHEIGHT | CBS_DROPDOWNLIST | WS_VSCROLL,
rect, pWndParent, BCGPROPLIST_ID_INPLACE))
{
delete pWndCombo;
return NULL;
}
return pWndCombo;
}
//****************************************************************************************
void CBCGPProp::OnClickButton (CPoint /*point*/)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndList);
if (m_pWndCombo != NULL)
{
m_bButtonIsDown = TRUE;
Redraw ();
CString str;
m_pWndInPlace->GetWindowText (str);
m_pWndCombo->SetCurSel (m_pWndCombo->FindStringExact (-1, str));
m_pWndCombo->SetFocus ();
m_pWndCombo->ShowDropDown ();
}
}
//****************************************************************************************
BOOL CBCGPProp::OnDblClick (CPoint /*point*/)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndList);
if (m_pWndInPlace == NULL)
{
return FALSE;
}
ASSERT (::IsWindow (m_pWndInPlace->GetSafeHwnd ()));
if (m_lstOptions.GetCount () > 1)
{
CString strText;
m_pWndInPlace->GetWindowText (strText);
POSITION pos = m_lstOptions.Find (strText);
if (pos == NULL)
{
return FALSE;
}
m_lstOptions.GetNext (pos);
if (pos == NULL)
{
pos = m_lstOptions.GetHeadPosition ();
}
ASSERT (pos != NULL);
strText = m_lstOptions.GetAt (pos);
m_pWndInPlace->SetWindowText (strText);
OnUpdateValue ();
return TRUE;
}
if (m_dwFlags & PROP_HAS_BUTTON)
{
CWaitCursor wait;
CString strPrevVal = FormatProperty ();
OnClickButton (CPoint (-1, -1));
if (strPrevVal != FormatProperty ())
{
m_pWndList->OnPropertyChanged (this);
}
return TRUE;
}
return FALSE;
}
//*****************************************************************************************
void CBCGPProp::OnSelectCombo ()
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndCombo);
ASSERT_VALID (m_pWndInPlace);
int iSelIndex = m_pWndCombo->GetCurSel ();
if (iSelIndex >= 0)
{
CString str;
m_pWndCombo->GetLBText (iSelIndex, str);
m_pWndInPlace->SetWindowText (str);
OnUpdateValue ();
}
}
//****************************************************************************************
void CBCGPProp::OnCloseCombo ()
{
ASSERT_VALID (this);
m_bButtonIsDown = FALSE;
Redraw ();
ASSERT_VALID (m_pWndInPlace);
m_pWndInPlace->SetFocus ();
}
//****************************************************************************************
BOOL CBCGPProp::OnSetCursor () const
{
if (m_bInPlaceEdit)
{
return FALSE;
}
switch (m_varValue.vt)
{
case VT_BSTR:
case VT_R4:
case VT_R8:
case VT_I2:
case VT_I4:
case VT_UI2:
case VT_UI4:
SetCursor (AfxGetApp ()->LoadStandardCursor (IDC_IBEAM));
return TRUE;
}
return FALSE;
}
//*******************************************************************************************
BOOL CBCGPProp::PushChar (UINT nChar)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndList);
ASSERT (m_pWndList->m_pSel == this);
ASSERT_VALID (m_pWndInPlace);
switch (m_varValue.vt)
{
case VT_BSTR:
case VT_R4:
case VT_R8:
case VT_I2:
case VT_I4:
case VT_UI2:
case VT_UI4:
if (m_bEnabled && m_bAllowEdit)
{
m_pWndInPlace->SetWindowText (_T(""));
m_pWndInPlace->SendMessage (WM_CHAR, (WPARAM) nChar);
return TRUE;
}
}
if (!m_bAllowEdit)
{
if (nChar == VK_SPACE)
{
OnDblClick (CPoint (-1, -1));
}
else if (m_lstOptions.GetCount () > 1)
{
CString strText;
m_pWndInPlace->GetWindowText (strText);
POSITION pos = m_lstOptions.Find (strText);
if (pos == NULL)
{
return FALSE;
}
POSITION posSave = pos;
CString strChar = (TCHAR) nChar;
strChar.MakeUpper ();
m_lstOptions.GetNext (pos);
while (pos != posSave)
{
if (pos == NULL)
{
pos = m_lstOptions.GetHeadPosition ();
}
if (pos == posSave)
{
break;
}
strText = m_lstOptions.GetAt (pos);
CString strUpper = strText;
strUpper.MakeUpper ();
if (strUpper.Left (1) == strChar)
{
m_pWndInPlace->SetWindowText (strText);
OnUpdateValue ();
break;
}
m_lstOptions.GetNext (pos);
}
}
}
OnEndEdit ();
ReleaseCapture ();
return FALSE;
}
//*******************************************************************************************
CString CBCGPProp::GetNameTooltip ()
{
ASSERT_VALID (this);
return m_bNameIsTrancated ? m_strName : _T("");
}
//*******************************************************************************************
CString CBCGPProp::GetValueTooltip ()
{
ASSERT_VALID (this);
return m_bValueIsTrancated ? FormatProperty () : _T("");
}
//*******************************************************************************************
HBRUSH CBCGPProp::OnCtlColor(CDC* pDC, UINT /*nCtlColor*/)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndList);
switch (m_varValue.vt)
{
case VT_BSTR:
case VT_R4:
case VT_R8:
case VT_I2:
case VT_I4:
case VT_UI2:
case VT_UI4:
case VT_BOOL:
if (!m_bEnabled || !m_bAllowEdit)
{
pDC->SetBkColor (globalData.clrWindow);
return (HBRUSH) globalData.brWindow.GetSafeHandle ();
}
}
return NULL;
}
/////////////////////////////////////////////////////////////////////////////
// CBCGPColorProp object
IMPLEMENT_DYNAMIC(CBCGPColorProp, CBCGPProp)
CBCGPColorProp::CBCGPColorProp(const CString& strName, const COLORREF& color,
CPalette* pPalette, LPCTSTR lpszDescr, DWORD dwData) :
CBCGPProp (strName, _variant_t(), lpszDescr, dwData),
m_Color (color)
{
CBCGPColorBar::InitColors (pPalette, m_Colors);
m_varValue = (LONG) color ;
m_dwFlags = PROP_HAS_LIST;
m_pPopup = NULL;
m_bStdColorDlg = FALSE;
m_ColorAutomatic = RGB (0, 0, 0);
m_nColumnsNumber = 5;
}
//*****************************************************************************************
CBCGPColorProp::~CBCGPColorProp()
{
}
//*******************************************************************************************
void CBCGPColorProp::OnDrawValue (CDC* pDC, CRect rect)
{
CRect rectColor = rect;
rect.left += rect.Height ();
CBCGPProp::OnDrawValue (pDC, rect);
rectColor.right = rectColor.left + rectColor.Height ();
rectColor.DeflateRect (1, 1);
rectColor.top++;
rectColor.left++;
CBrush br (m_Color == (COLORREF)-1 ? m_ColorAutomatic : m_Color);
pDC->FillRect (rectColor, &br);
pDC->Draw3dRect (rectColor, 0, 0);
}
//****************************************************************************************
void CBCGPColorProp::OnClickButton (CPoint /*point*/)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndList);
m_bButtonIsDown = TRUE;
Redraw ();
CList<COLORREF,COLORREF> lstDocColors;
m_pPopup = new CColorPopup (NULL, m_Colors, m_Color,
NULL, NULL, NULL, lstDocColors,
m_nColumnsNumber, m_ColorAutomatic);
m_pPopup->SetPropList (m_pWndList);
if (!m_strOtherColor.IsEmpty ()) // Other color button
{
m_pPopup->m_wndColorBar.EnableOtherButton (m_strOtherColor, !m_bStdColorDlg);
}
if (!m_strAutoColor.IsEmpty ()) // Automatic color button
{
m_pPopup->m_wndColorBar.EnableAutomaticButton (m_strAutoColor, m_ColorAutomatic);
}
CPoint pt (
m_pWndList->m_rectList.left + m_pWndList->m_nLeftColumnWidth + 1,
m_rectButton.bottom + 1);
m_pWndList->ClientToScreen (&pt);
if (!m_pPopup->Create (m_pWndList, pt.x, pt.y, NULL, FALSE))
{
ASSERT (FALSE);
m_pPopup = NULL;
}
else
{
m_pPopup->GetMenuBar()->SetFocus ();
}
}
//******************************************************************************************
BOOL CBCGPColorProp::OnEdit (LPPOINT /*lptClick*/)
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndList);
m_pWndInPlace = NULL;
CRect rectEdit = m_Rect;
rectEdit.DeflateRect (0, 2);
rectEdit.left = m_pWndList->m_rectList.left +
m_pWndList->m_nLeftColumnWidth + TEXT_MARGIN + m_Rect.Height () + 1;
m_rectButton = m_Rect;
m_rectButton.left = m_rectButton.right - m_rectButton.Height () + 3;
m_rectButton.top ++;
rectEdit.right = m_rectButton.left;
CEdit* pWndEdit = new CEdit;
DWORD dwStyle = WS_VISIBLE | WS_CHILD;
if (!m_bEnabled)
{
dwStyle |= ES_READONLY;
}
pWndEdit->Create (dwStyle, rectEdit, m_pWndList, BCGPROPLIST_ID_INPLACE);
m_pWndInPlace = pWndEdit;
m_pWndInPlace->SetWindowText (FormatProperty ());
m_pWndInPlace->SetFont (m_pWndList->GetFont ());
m_pWndInPlace->SetFocus ();
m_bInPlaceEdit = TRUE;
return TRUE;
}
//****************************************************************************************
CString CBCGPColorProp::FormatProperty ()
{
ASSERT_VALID (this);
CString str;
str.Format (_T("%06x"), m_Color);
return str;
}
//******************************************************************************************
void CBCGPColorProp::SetColor (COLORREF color)
{
ASSERT_VALID (this);
m_Color = color;
m_varValue = (LONG) color;
if (::IsWindow (m_pWndList->GetSafeHwnd()))
{
CRect rect = m_Rect;
rect.DeflateRect (0, 1);
m_pWndList->InvalidateRect (rect);
m_pWndList->UpdateWindow ();
}
if (m_pWndInPlace != NULL)
{
ASSERT_VALID (m_pWndInPlace);
m_pWndInPlace->SetWindowText (FormatProperty ());
}
}
//********************************************************************************
void CBCGPColorProp::SetColumnsNumber (int nColumnsNumber)
{
ASSERT_VALID (this);
ASSERT (nColumnsNumber > 0);
m_nColumnsNumber = nColumnsNumber;
}
//*************************************************************************************
void CBCGPColorProp::EnableAutomaticButton (LPCTSTR lpszLabel, COLORREF colorAutomatic, BOOL bEnable)
{
ASSERT_VALID (this);
m_ColorAutomatic = colorAutomatic;
m_strAutoColor = (!bEnable || lpszLabel == NULL) ? _T("") : lpszLabel;
}
//*************************************************************************************
void CBCGPColorProp::EnableOtherButton (LPCTSTR lpszLabel, BOOL bAltColorDlg, BOOL bEnable)
{
ASSERT_VALID (this);
m_bStdColorDlg = !bAltColorDlg;
m_strOtherColor = (!bEnable || lpszLabel == NULL) ? _T("") : lpszLabel;
}
//*****************************************************************************************
BOOL CBCGPColorProp::OnUpdateValue ()
{
ASSERT_VALID (this);
ASSERT_VALID (m_pWndInPlace);
ASSERT (::IsWindow (m_pWndInPlace->GetSafeHwnd ()));
CString strText;
m_pWndInPlace->GetWindowText (strText);
COLORREF colorCurr = m_Color;
_stscanf (strText, _T("%x"), &m_Color);
if (colorCurr != m_Color)
{
m_pWndList->OnPropertyChanged (this);
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CBCGPFileProp object
IMPLEMENT_DYNAMIC(CBCGPFileProp, CBCGPProp)
CBCGPFileProp::CBCGPFileProp(const CString& strName, const CString& strFolderName, DWORD dwData, LPCTSTR lpszDescr) :
CBCGPProp (strName, _variant_t((LPCTSTR)strFolderName), lpszDescr, dwData),
m_bIsFolder (TRUE)
{
m_dwFlags = PROP_HAS_BUTTON;
}
//*****************************************************************************************
CBCGPFileProp::CBCGPFileProp ( const CString& strName,
BOOL bOpenFileDialog,
const CString& strFileName,
LPCTSTR lpszDefExt,
DWORD dwFileFlags,
LPCTSTR lpszFilter,
LPCTSTR lpszDescr,
DWORD dwData) :
CBCGPProp (strName, _variant_t((LPCTSTR)strFileName), lpszDescr, dwData),
m_bIsFolder (FALSE),
m_bOpenFileDialog (bOpenFileDialog),
m_dwFileOpenFlags (dwFileFlags)
{
m_dwFlags = PROP_HAS_BUTTON;
m_strDefExt = lpszDefExt == NULL ? _T("") : lpszDefExt;
m_strFilter = lpszFilter == NULL ? _T("") : lpszFilter;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -