⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcgpproplist.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			m_pWndList->m_ToolTip.AddTool (m_pWndList, LPSTR_TEXTCALLBACK, rectName, m_pWndList->m_nTooltipsCount + 1);
			m_pWndList->m_nTooltipsCount ++;

			if (!IsGroup ())
			{
				CRect rectValue = m_Rect;
				rectValue.left = rectName.right + 1;
				m_pWndList->m_ToolTip.AddTool (m_pWndList, LPSTR_TEXTCALLBACK, rectValue, m_pWndList->m_nTooltipsCount + 1);

				m_pWndList->m_nTooltipsCount ++;
			}
		}
	}
	else
	{
		m_Rect.SetRectEmpty ();
		m_rectButton.SetRectEmpty ();
	}

	for (POSITION pos = m_lstSubItems.GetHeadPosition (); pos != NULL;)
	{
		CBCGPProp* pProp = m_lstSubItems.GetNext (pos);
		ASSERT_VALID (pProp);

		pProp->Repos (y);
	}

	OnPosSizeChanged (rectOld);
}
//******************************************************************************************
void CBCGPProp::AddTerminalProp (CList<CBCGPProp*, CBCGPProp*>& lstProps)
{
	ASSERT_VALID (this);

	if (!m_bGroup)
	{
		// Insert sorted:
		BOOL bInserted = FALSE;
		for (POSITION pos = lstProps.GetHeadPosition (); !bInserted && pos != NULL;)
		{
			POSITION posSave = pos;

			CBCGPProp* pProp = lstProps.GetNext (pos);
			if (pProp->m_strName > m_strName)
			{
				lstProps.InsertBefore (posSave, this);
				bInserted = TRUE;
			}
		}

		if (!bInserted)
		{
			lstProps.AddTail (this);
		}
		return;
	}

	m_Rect.SetRectEmpty ();

	for (POSITION pos = m_lstSubItems.GetHeadPosition (); pos != NULL;)
	{
		CBCGPProp* pProp = m_lstSubItems.GetNext (pos);
		ASSERT_VALID (pProp);

		pProp->AddTerminalProp (lstProps);
	}
}
//****************************************************************************************
BOOL CBCGPProp::IsSubItem (CBCGPProp* pSubProp) const
{
	ASSERT_VALID (this);
	ASSERT_VALID (pSubProp);

	for (POSITION pos = m_lstSubItems.GetHeadPosition (); pos != NULL;)
	{
		CBCGPProp* pProp = m_lstSubItems.GetNext (pos);
		ASSERT_VALID (pProp);

		if (pSubProp == pProp || pProp->IsSubItem (pSubProp))
		{
			return TRUE;
		}
	}

	return FALSE;
}
//******************************************************************************************
CBCGPProp* CBCGPProp::FindSubItemByData (DWORD dwData) const
{
	ASSERT_VALID (this);
	
	for (POSITION pos = m_lstSubItems.GetHeadPosition (); pos != NULL;)
	{
		CBCGPProp* pProp = m_lstSubItems.GetNext (pos);
        ASSERT_VALID (pProp);
		
        if (pProp->m_dwData == dwData)
        {
			return pProp;
		}
		
		pProp = pProp->FindSubItemByData (dwData);
		
		if (pProp != NULL)
		{
			return pProp;
        }
    }
	
	return NULL;
}
//*****************************************************************************************
CString CBCGPProp::FormatProperty ()
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndList);

	_variant_t& var = m_varValue;

	CString strVal;

	switch (var.vt)
	{
	case VT_BSTR:
		strVal = (LPCTSTR)(_bstr_t)var;
		break;

    case VT_I2:
		strVal.Format (m_strFormatShort, (short) var);
		break;

	case VT_I4:
		strVal.Format (m_strFormatLong, (long) var);
		break;

    case VT_UI2:
		strVal.Format( m_strFormatUShort, var.uiVal);
		break;

	case VT_UI4:
		strVal.Format (m_strFormatULong, var.ulVal);
		break;

    case VT_R4:
		strVal.Format (m_strFormatFloat, (float) var);
		break;

    case VT_R8:
		strVal.Format (m_strFormatDouble, (double) var);
		break;

    case VT_BOOL:
		{
			bool bVal = (bool) var;
			strVal = bVal ? m_pWndList->m_strTrue : m_pWndList->m_strFalse;
		}
		break;

	default:
		// Unsupported type
		strVal = _T("*** error ***");
	}

	return strVal;
}
//****************************************************************************************
void CBCGPProp::OnDrawName (CDC* pDC, CRect rect)
{
	ASSERT_VALID (this);
	ASSERT_VALID (pDC);
	ASSERT_VALID (m_pWndList);

	COLORREF clrTextOld = (COLORREF)-1;

	if (IsSelected () && (!m_pWndList->m_bVSDotNetLook || !IsGroup ()))
	{
		CRect rectFill = rect;
		rectFill.top++;

		if (!m_pWndList->m_bFocused)
		{
			clrTextOld = pDC->SetTextColor (globalData.clrBtnText);
			pDC->FillRect (rectFill, 
				m_pWndList->m_bControlBarColors ? &globalData.brBarFace : &globalData.brBtnFace);
		}
		else
		{
			clrTextOld = pDC->SetTextColor (globalData.clrTextHilite);
			pDC->FillRect (rectFill, &globalData.brHilite);
		}
	}

	if (m_pWndList->m_bVSDotNetLook && IsGroup ())
	{
		clrTextOld = pDC->SetTextColor (
			m_pWndList->m_bControlBarColors ? globalData.clrBarShadow : globalData.clrBtnShadow);
	}

	rect.DeflateRect (TEXT_MARGIN, 0);
	int nTextHeight = pDC->DrawText (m_strName, rect, 
		DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS);

	m_bNameIsTrancated = pDC->GetTextExtent (m_strName).cx > rect.Width ();

	if (IsSelected () && m_pWndList->m_bVSDotNetLook && IsGroup ())
	{
		CRect rectFocus = rect;
		rectFocus.top = rectFocus.CenterPoint ().y - nTextHeight / 2;
		rectFocus.bottom = rectFocus.top + nTextHeight;
		rectFocus.right = 
			min (rect.right, rectFocus.left + pDC->GetTextExtent (m_strName).cx);
		rectFocus.InflateRect (2, 0);

		COLORREF clrShadow = m_pWndList->m_bControlBarColors ?
			globalData.clrBarShadow : globalData.clrBtnShadow;

		pDC->Draw3dRect (rectFocus, clrShadow, clrShadow);
	}

	if (clrTextOld != (COLORREF)-1)
	{
		pDC->SetTextColor (clrTextOld);
	}
}
//******************************************************************************************
void CBCGPProp::OnDrawValue (CDC* pDC, CRect rect)
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndList);

	if (IsGroup () || !HasValueField ())
	{
		return;
	}

	CString strVal = FormatProperty ();

	rect.DeflateRect (TEXT_MARGIN, 0);

	pDC->DrawText (strVal, rect, 
		DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_NOPREFIX | DT_END_ELLIPSIS);

	m_bValueIsTrancated = pDC->GetTextExtent (strVal).cx > rect.Width ();
}
//******************************************************************************************
void CBCGPProp::OnDrawButton (CDC* pDC, CRect rect)
{
	ASSERT_VALID (this);
	ASSERT_VALID (pDC);
	ASSERT_VALID (m_pWndList);

	CBCGPToolbarComboBoxButton button;

	CBCGPVisualManager::BCGBUTTON_STATE state = 
					m_bButtonIsDown ?
					CBCGPVisualManager::ButtonsIsPressed :
					CBCGPVisualManager::ButtonsIsRegular;

	CBCGPVisualManager::GetInstance ()->OnFillButtonInterior (pDC,
		&button, rect, state);

	pDC->FillRect (rect, m_pWndList->m_bControlBarColors ?
		&globalData.brBarFace : &globalData.brBtnFace);

	if (m_dwFlags & PROP_HAS_LIST)
	{
		CBCGPVisualManager::GetInstance ()->OnDrawComboDropButton (pDC,
			rect, !m_bEnabled, m_bButtonIsDown, m_bButtonIsDown, &button);
		return;
	}

	CString str = _T("...");
	pDC->DrawText (str, rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

	CBCGPVisualManager::GetInstance ()->OnDrawButtonBorder (pDC, &button, rect, state);
}
//****************************************************************************************
void CBCGPProp::OnDrawExpandBox (CDC* pDC, CRect rect)
{
	ASSERT_VALID (this);
	ASSERT_VALID (pDC);
	ASSERT_VALID (m_pWndList);
	ASSERT (IsGroup ());

	CPoint ptCenter = rect.CenterPoint ();

	int nBoxSize = min (9, rect.Width ());

	rect = CRect (ptCenter, CSize (1, 1));
	rect.InflateRect (nBoxSize / 2, nBoxSize / 2);

	COLORREF clrShadow = m_pWndList->m_bControlBarColors ? 
		globalData.clrBarShadow : globalData.clrBtnShadow;
	COLORREF clrText = m_pWndList->m_bControlBarColors ? 
		globalData.clrBarText : globalData.clrBtnText;

	CBCGPVisualManager::GetInstance ()->OnDrawExpandingBox (pDC, rect, 
		m_bExpanded && !m_lstSubItems.IsEmpty (),
		m_pWndList->m_bVSDotNetLook ? clrText : clrShadow);
}
//******************************************************************************************
BOOL CBCGPProp::OnUpdateValue ()
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndInPlace);
	ASSERT_VALID (m_pWndList);
	ASSERT (::IsWindow (m_pWndInPlace->GetSafeHwnd ()));

	CString strText;
	m_pWndInPlace->GetWindowText (strText);

	BOOL bRes = FALSE;
	BOOL bIsChanged = FormatProperty () != strText;

	switch (m_varValue.vt)
	{
	case VT_BSTR:
		m_varValue = (LPCTSTR) strText;
		bRes = TRUE;
		break;

    case VT_I2:
		m_varValue = (short) _ttoi (strText);
		bRes = TRUE;
		break;

	case VT_I4:
		m_varValue = _ttol (strText);
		bRes = TRUE;
		break;

	case VT_UI2:
		m_varValue.uiVal = unsigned short (_ttoi (strText));
		bRes = TRUE	;
		break;

	case VT_UI4:
		m_varValue.ulVal = unsigned long (_ttol (strText));
		bRes = TRUE	;
		break;

    case VT_R4:
		{
			float fVal;
			_stscanf (strText, m_strFormatFloat, &fVal);
			m_varValue = fVal;
			bRes = TRUE;
		}
		break;

    case VT_R8:
		{
			double dblVal;
			_stscanf (strText, m_strFormatDouble, &dblVal);
			m_varValue = dblVal;
			bRes = TRUE;
		}
		break;

	case VT_DATE:
		break;

    case VT_BOOL:
		{
			m_varValue = (bool) (strText == m_pWndList->m_strTrue);
			bRes = TRUE;
		}
		break;

	default:
		break;
	}

	if (bRes && bIsChanged)
	{
		m_pWndList->OnPropertyChanged (this);
	}

	return bRes;
}
//******************************************************************************************
BOOL CBCGPProp::OnEdit (LPPOINT /*lptClick*/)
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndList);

	if (!HasValueField ())
	{
		return FALSE;
	}

	m_pWndInPlace = NULL;

	CRect rectEdit = m_Rect;
	rectEdit.DeflateRect (0, 2);

	rectEdit.left = m_pWndList->m_rectList.left + m_pWndList->m_nLeftColumnWidth + TEXT_MARGIN + 1;

	if (HasButton ())
	{
		m_rectButton = m_Rect;
		m_rectButton.left = m_rectButton.right - m_rectButton.Height () + 3;
		m_rectButton.top ++;

		rectEdit.right = m_rectButton.left;
	}

	CRect rectSpin;

	if (m_dwFlags & PROP_HAS_SPIN)
	{
		rectSpin = m_Rect;
		rectSpin.right = rectEdit.right;
		rectSpin.left = rectSpin.right - rectSpin.Height ();
		rectSpin.top ++;
		rectEdit.right = rectSpin.left;
	}

	BOOL bDefaultFormat = FALSE;
	m_pWndInPlace = CreateInPlaceEdit (rectEdit, bDefaultFormat);

	if (m_pWndInPlace != NULL)
	{
		if (bDefaultFormat)
		{
			m_pWndInPlace->SetWindowText (FormatProperty ());
		}

		if (m_dwFlags & PROP_HAS_LIST)
		{
			CRect rectCombo = m_Rect;
			rectCombo.left = rectEdit.left - 4;

			m_pWndCombo = CreateCombo (m_pWndList, rectCombo);
			ASSERT_VALID (m_pWndCombo);

			m_pWndCombo->SetFont (m_pWndList->GetFont ());

			//-----------------------------------------------------------------------
			// Synchronize bottom edge of the combobox with the property bottom edge:
			//-----------------------------------------------------------------------
			m_pWndCombo->GetWindowRect (rectCombo);
			m_pWndList->ScreenToClient (&rectCombo);

			int dy = rectCombo.Height () - m_Rect.Height ();

			m_pWndCombo->SetWindowPos (NULL, rectCombo.left,
				rectCombo.top - dy + 1, -1, -1, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);

			if (m_varValue.vt == VT_BOOL)
			{
				m_lstOptions.AddTail (m_pWndList->m_strTrue);
				m_lstOptions.AddTail (m_pWndList->m_strFalse);
			}

			for (POSITION pos = m_lstOptions.GetHeadPosition (); pos != NULL;)
			{
				m_pWndCombo->AddString (m_lstOptions.GetNext (pos));
			}
		}

		if (m_dwFlags & PROP_HAS_SPIN)
		{
			m_pWndSpin = CreateSpinControl (rectSpin);
		}

		m_pWndInPlace->SetFont (m_pWndList->GetFont ());
		m_pWndInPlace->SetFocus ();

		if (!m_bAllowEdit)
		{
			m_pWndInPlace->HideCaret ();
		}

		m_bInPlaceEdit = TRUE;
		return TRUE;
	}

	return FALSE;
}
//******************************************************************************************
CWnd* CBCGPProp::CreateInPlaceEdit (CRect rectEdit, BOOL& bDefaultFormat)
{
	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:
		{
			CEdit* pWndEdit = NULL;

			if (!m_strEditMask.IsEmpty () || !m_strEditTempl.IsEmpty () ||
				!m_strValidChars.IsEmpty ())
			{
				CBCGPMaskEdit* pWndEditMask = new CBCGPMaskEdit;

				if (!m_strEditMask.IsEmpty () && !m_strEditTempl.IsEmpty ())
				{
					pWndEditMask->EnableMask (m_strEditMask, m_strEditTempl, _T(' '));
				}

				if (!m_strValidChars.IsEmpty ())
				{
					pWndEditMask->SetValidChars (m_strValidChars);
				}

				pWndEdit = pWndEditMask;
			}
			else
			{
				pWndEdit = new CEdit;
			}

			DWORD dwStyle = WS_VISIBLE | WS_CHILD | ES_AUTOHSCROLL;

			if (!m_bEnabled || !m_bAllowEdit)
			{
				dwStyle |= ES_READONLY;
			}

			pWndEdit->Create (dwStyle, rectEdit, m_pWndList, BCGPROPLIST_ID_INPLACE);

			bDefaultFormat = TRUE;
			return pWndEdit;
		}
		break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -