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

📄 bcgpproplist.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	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 + -