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

📄 bcgpproplist.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}
//*****************************************************************************************
CBCGPFileProp::~CBCGPFileProp()
{
}
//****************************************************************************************
void CBCGPFileProp::OnClickButton (CPoint /*point*/)
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndList);
	ASSERT_VALID (m_pWndInPlace);
	ASSERT (::IsWindow (m_pWndInPlace->GetSafeHwnd ()));

	m_bButtonIsDown = TRUE;
	Redraw ();

	CString strPath = (LPCTSTR)(_bstr_t)m_varValue;
	BOOL bUpdate = FALSE;

	if (m_bIsFolder)
	{
		if (g_pShellManager == NULL)
		{
			if (g_pWorkspace != NULL)
			{
				g_pWorkspace->InitShellManager ();
			}
		}

		if (g_pShellManager == NULL)
		{
			ASSERT (FALSE);
		}
		else
		{
			bUpdate = g_pShellManager->BrowseForFolder (strPath, m_pWndList, strPath);
		}
	}
	else
	{
		CFileDialog dlg (m_bOpenFileDialog, m_strDefExt, strPath, m_dwFileOpenFlags, m_strFilter,
			m_pWndList);
		if (dlg.DoModal () == IDOK)
		{
			bUpdate = TRUE;
			strPath = dlg.GetPathName ();
		}
	}

	if (bUpdate)
	{
		if (m_pWndInPlace != NULL)
		{
			m_pWndInPlace->SetWindowText (strPath);
		}

		m_varValue = (LPCTSTR) strPath;
	}

	m_bButtonIsDown = FALSE;
	Redraw ();

	if (m_pWndInPlace != NULL)
	{
		m_pWndInPlace->SetFocus ();
	}
	else
	{
		m_pWndList->SetFocus ();
	}
}

/////////////////////////////////////////////////////////////////////////////
// CBCGPDateTimeProp object

IMPLEMENT_DYNAMIC(CBCGPDateTimeProp, CBCGPProp)

CBCGPDateTimeProp::CBCGPDateTimeProp(const CString& strName, const COleDateTime& date, 
		LPCTSTR lpszDescr/* = NULL*/, DWORD dwData/* = 0*/,
		UINT nFlags/* = CBCGPDateTimeCtrl::DTM_DATE | CBCGPDateTimeCtrl::DTM_TIME | CBCGPDateTimeCtrl::DTM_DROPCALENDAR*/) :
	CBCGPProp (strName, _variant_t(date, VT_DATE), lpszDescr, dwData)
{
	m_nFlags = nFlags;
}
//*****************************************************************************************
CBCGPDateTimeProp::~CBCGPDateTimeProp()
{
}
//****************************************************************************************
void CBCGPDateTimeProp::OnDrawValue (CDC* pDC, CRect rect)
{
	rect.DeflateRect (0, 2);

	rect.left = m_pWndList->GetListRect ().left + 
				m_pWndList->GetPropertyColumnWidth () + TEXT_MARGIN + 1;

	DRAWITEMSTRUCT dis;
	memset (&dis, 0, sizeof (DRAWITEMSTRUCT));

	dis.CtlType = ODT_BUTTON;
	dis.hDC = pDC->GetSafeHdc ();
	dis.rcItem = rect;

	m_wndDateTime.m_bDrawDateTimeOnly = !IsSelected () || !m_bEnabled;
	m_wndDateTime.SetTextColor (m_bEnabled ? (COLORREF)-1 : globalData.clrGrayedText, FALSE);
	m_wndDateTime.DrawItem (&dis);
}
//*****************************************************************************
CWnd* CBCGPDateTimeProp::CreateInPlaceEdit (CRect rectEdit, BOOL& bDefaultFormat)
{
	CBCGPDateTimeCtrl* pDateTime = new CBCGPDateTimeCtrl;
	ASSERT_VALID (pDateTime);

	pDateTime->SetAutoResize (FALSE);

	rectEdit.bottom++;

	pDateTime->Create (_T(""), WS_CHILD | WS_VISIBLE, rectEdit, 
		m_pWndList, BCGPROPLIST_ID_INPLACE);

	SetState (*pDateTime);
	pDateTime->SetDate (GetDate ());

	bDefaultFormat = FALSE;

	return pDateTime;
}
//*******************************************************************************
void CBCGPDateTimeProp::OnPosSizeChanged (CRect /*rectOld*/)
{
	CRect rectEdit = m_Rect;
	rectEdit.DeflateRect (0, 2);

	rectEdit.left = m_pWndList->GetListRect ().left + 
					m_pWndList->GetPropertyColumnWidth () + TEXT_MARGIN + 1;
	rectEdit.bottom++;

	if (m_wndDateTime.GetSafeHwnd () == NULL)
	{
		m_wndDateTime.SetAutoResize (FALSE);
		m_wndDateTime.Create (_T(""), WS_CHILD, rectEdit,
								m_pWndList, (UINT)-1);

		SetState (m_wndDateTime);
		m_wndDateTime.SetDate (GetDate ());
	}
	else
	{
		m_wndDateTime.SetWindowPos (NULL, rectEdit.left, rectEdit.top,
			rectEdit.Width (), rectEdit.Height (),
			SWP_NOZORDER | SWP_NOACTIVATE);
	}

	m_wndDateTime.AdjustControl (rectEdit);
}
//******************************************************************************************
BOOL CBCGPDateTimeProp::OnUpdateValue ()
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndInPlace);
	ASSERT_VALID (m_pWndList);
	ASSERT (::IsWindow (m_pWndInPlace->GetSafeHwnd ()));

	CBCGPDateTimeCtrl* pDateTime = DYNAMIC_DOWNCAST (CBCGPDateTimeCtrl, m_pWndInPlace);
	ASSERT_VALID (pDateTime);

	COleDateTime dateOld = GetDate ();
	COleDateTime dateNew = pDateTime->GetDate ();

	m_varValue = _variant_t (dateNew, VT_DATE);
	m_wndDateTime.SetDate (dateNew);

	if (dateOld != dateNew)
	{
		m_pWndList->OnPropertyChanged (this);
	}

	return TRUE;
}
//********************************************************************************
void CBCGPDateTimeProp::SetDate (COleDateTime date)
{
	ASSERT_VALID (this);
	SetValue (_variant_t (date, VT_DATE));
}
//*********************************************************************************
void CBCGPDateTimeProp::SetState (CBCGPDateTimeCtrl& wnd)
{
	ASSERT (wnd.GetSafeHwnd () != NULL);

	UINT stateFlags = 0;

	if (m_nFlags & (CBCGPDateTimeCtrl::DTM_DATE))
	{
		stateFlags |= (CBCGPDateTimeCtrl::DTM_DATE | CBCGPDateTimeCtrl::DTM_DROPCALENDAR);
	}
	
	if (m_nFlags & (CBCGPDateTimeCtrl::DTM_TIME))
	{
		stateFlags |= (CBCGPDateTimeCtrl::DTM_TIME);
	}

	const UINT stateMask = 
		CBCGPDateTimeCtrl::DTM_SPIN |
		CBCGPDateTimeCtrl::DTM_DROPCALENDAR | 
		CBCGPDateTimeCtrl::DTM_DATE |
		CBCGPDateTimeCtrl::DTM_TIME24H |
		CBCGPDateTimeCtrl::DTM_CHECKBOX |
		CBCGPDateTimeCtrl::DTM_TIME | 
		CBCGPDateTimeCtrl::DTM_TIME24HBYLOCALE;

	wnd.SetState (stateFlags, stateMask);
}
//********************************************************************************
void CBCGPDateTimeProp::OnSetSelection (CBCGPProp* /*pOldSel*/)
{
	Redraw ();
}
//********************************************************************************
void CBCGPDateTimeProp::OnKillSelection (CBCGPProp* /*pNewSel*/)
{
	Redraw ();
}
//********************************************************************************
BOOL CBCGPDateTimeProp::PushChar (UINT nChar)
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndList);
	ASSERT (m_pWndList->GetCurSel () == this);
	ASSERT_VALID (m_pWndInPlace);

	if (m_bEnabled && m_bAllowEdit)
	{
		CString str = (TCHAR) nChar;
		str.MakeUpper ();

		m_pWndInPlace->SendMessage (WM_KEYDOWN, (WPARAM) str [0]);
		return TRUE;
	}

	OnEndEdit ();
	ReleaseCapture ();
	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// CBCGPFontProp object

IMPLEMENT_DYNAMIC(CBCGPFontProp, CBCGPProp)

CBCGPFontProp::CBCGPFontProp(const CString& strName, LOGFONT& lf, DWORD dwFontDialogFlags, LPCTSTR lpszDescr, DWORD dwData) :
	CBCGPProp (strName, _variant_t((LPCTSTR)lf.lfFaceName), lpszDescr, dwData),
	m_dwFontDialogFlags (dwFontDialogFlags)
{
	m_dwFlags = PROP_HAS_BUTTON;
	m_lf = lf;
	m_bAllowEdit = FALSE;
}
//*****************************************************************************************
CBCGPFontProp::~CBCGPFontProp()
{
}
//****************************************************************************************
void CBCGPFontProp::OnClickButton (CPoint /*point*/)
{
	ASSERT_VALID (this);
	ASSERT_VALID (m_pWndList);
	ASSERT_VALID (m_pWndInPlace);
	ASSERT (::IsWindow (m_pWndInPlace->GetSafeHwnd ()));

	LOGFONT lfPrev = m_lf;

	m_bButtonIsDown = TRUE;
	Redraw ();

	CFontDialog dlg (&m_lf, m_dwFontDialogFlags, NULL, m_pWndList);
	if (dlg.DoModal () == IDOK)
	{
		dlg.GetCurrentFont (&m_lf);

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

			if (memcmp (&lfPrev, &m_lf, sizeof (lfPrev) - sizeof (lfPrev.lfFaceName)) ||
				_tcscmp( lfPrev.lfFaceName, m_lf.lfFaceName))
			{
				m_pWndList->OnPropertyChanged (this);
			}
		}
		else
		{
			m_varValue = (LPCTSTR) FormatProperty ();
		}
	}

	if (m_pWndInPlace != NULL)
	{
		m_pWndInPlace->SetFocus ();
	}
	else
	{
		m_pWndList->SetFocus ();
	}

	m_bButtonIsDown = FALSE;
	Redraw ();
}
//*****************************************************************************
CString CBCGPFontProp::FormatProperty ()
{
	CString str;
	CWindowDC dc (m_pWndList);

	int nLogY = dc.GetDeviceCaps (LOGPIXELSY);
	if (nLogY != 0)
	{
		str.Format( _T("%s(%i)"), m_lf.lfFaceName, 
			MulDiv (72, -m_lf.lfHeight, nLogY));
	}
	else
	{
		str = m_lf.lfFaceName;
	}

	return str;
}

/////////////////////////////////////////////////////////////////////////////
// CBCGPPropList

IMPLEMENT_DYNAMIC(CBCGPPropList, CWnd)

/////////////////////////////////////////////////////////////////////////////
// CBCGPPropList notification messages:

UINT BCGM_PROPERTY_CHANGED = ::RegisterWindowMessage (_T("BCGM_PROPERTYCHANGED"));

CBCGPPropList::CBCGPPropList()
{
	m_hFont = NULL;
	m_bHeaderCtrl = TRUE;
	m_bDescriptionArea = FALSE;
	m_nDescrHeight = -1;
	m_bAlphabeticMode = FALSE;
	m_bVSDotNetLook = FALSE;
	m_rectList.SetRectEmpty ();
	m_nLeftColumnWidth = 0;
	m_rectTrackHeader.SetRectEmpty ();
	m_rectTrackDescr.SetRectEmpty ();
	m_nRowHeight = 0;
	m_nHeaderHeight = 0;
	m_nVertScrollOffset = 0;
	m_nVertScrollTotal = 0;
	m_nVertScrollPage = 0;
	m_pSel = NULL;
	m_bFocused = FALSE;
	m_nTooltipsCount = 0;
	m_bTracking = FALSE;
	m_bTrackingDescr = FALSE;

	m_strTrue = _T("True");
	m_strFalse = _T("False");

	m_bControlBarColors = FALSE;
	m_bGroupNameFullWidth = TRUE;
	m_bShowDragContext = TRUE;
}

CBCGPPropList::~CBCGPPropList()
{
}

BEGIN_MESSAGE_MAP(CBCGPPropList, CWnd)
	//{{AFX_MSG_MAP(CBCGPPropList)
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_WM_SETTINGCHANGE()
	ON_WM_PAINT()
	ON_WM_ERASEBKGND()
	ON_WM_LBUTTONDOWN()
	ON_WM_CANCELMODE()
	ON_WM_KILLFOCUS()
	ON_WM_GETDLGCODE()
	ON_WM_VSCROLL()
	ON_WM_MOUSEWHEEL()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_SETCURSOR()
	ON_WM_KEYDOWN()
	ON_WM_CHAR()
	ON_WM_SETFOCUS()
	ON_WM_CTLCOLOR()
	ON_WM_DESTROY()
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONUP()
	ON_WM_NCCALCSIZE()
	ON_WM_NCPAINT()
	ON_WM_RBUTTONDOWN()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_SETFONT, OnSetFont)
	ON_MESSAGE(WM_GETFONT, OnGetFont)
	ON_NOTIFY(HDN_ITEMCHANGED, ID_HEADER, OnHeaderItemChanged)
	ON_NOTIFY(HDN_TRACK, ID_HEADER, OnHeaderTrack)
	ON_NOTIFY(HDN_ENDTRACK, ID_HEADER, OnHeaderEndTrack)
	ON_WM_STYLECHANGED()
	ON_CBN_SELENDOK(BCGPROPLIST_ID_INPLACE, OnSelectCombo)
	ON_CBN_CLOSEUP(BCGPROPLIST_ID_INPLACE, OnCloseCombo)
	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xFFFF, OnNeedTipText)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBCGPPropList message handlers

void CBCGPPropList::PreSubclassWindow() 
{
	CWnd::PreSubclassWindow();

	_AFX_THREAD_STATE* pThreadState = AfxGetThreadState ();
	if (pThreadState->m_pWndInit == NULL)
	{
		Init ();
	}
}
//******************************************************************************************
int CBCGPPropList::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	Init ();
	return 0;
}
//******************************************************************************************
void CBCGPPropList::Init ()
{
	CRect rectDummy;
	rectDummy.SetRectEmpty ();

	if (globalData.m_hcurStretch == NULL)
	{
		globalData.m_hcurStretch = AfxGetApp ()->LoadCursor (AFX_IDC_HSPLITBAR);
	}

	if (globalData.m_hcurStretchVert == NULL)
	{
		globalData.m_hcurStretchVert = AfxGetApp ()->LoadCursor (AFX_IDC_VSPLITBAR);
	}

	InitHeader ();

	HDITEM hdItem;
	hdItem.mask = HDI_TEXT | HDI_FORMAT;
	hdItem.fmt = HDF_LEFT;
	hdItem.pszText = _T("Property");
	hdItem.cchTextMax = 100;

	GetHeaderCtrl ().InsertItem (0, &hdItem);

	hdItem.pszText = _T("Value");
	hdItem.cchTextMax = 100;

	GetHeaderCtrl ().InsertItem (1, &hdItem);

	m_wndScrollVert.Create (WS_CHILD | WS_VISIBLE | SBS_VERT, rectDummy, this, ID_SCROLL_VERT);

	m_ToolTip.Create (this, TTS_ALWAYSTIP);
	m_ToolTip.Activate (TRUE);
	if(globalData.m_nMaxToolTipWidth != -1)
	{
		m_ToolTip.SetMaxTipWidth(globalData.m_nMaxToolTipWidth);
	}
	m_ToolTip.BringWindowToTop ();

	CWnd* pWndParent = GetParent ();
	m_bControlBarColors = pWndParent == NULL ||
		!pWndParent->IsKindOf (RUNTIME_CLASS (CDialog));

	AdjustLayout ();
	CreateBoldFont ();
}
//******************************************************************************************
void CBCGPPropList::InitHeader ()
{
	CRect rectDummy;
	rectDummy.SetRectEmpty ();

	m_wndHeader.Create (WS_CHILD | WS_VISIBLE | HDS_HORZ, rectDummy, this, ID_HEADER);
}
//*****************************************************************************************
void CBCGPPropList::AdjustLayout ()
{
	if (GetSafeHwnd () == NULL)
	{
		return;
	}

	CClientDC dc (this);
	HFONT hfontOld = SetFont (&dc);

	TEXTMETRIC tm;
	dc.GetTextMetrics (&tm);
	m_nRowHeight = tm.tmHeight + 4;

	m_nHeaderHeight = 0;

	CRect rectClient;
	GetClientRect (rectClient);

	if (m_bHeaderCtrl)
	{
		m_nHeaderHeight = m_nRowHeight + 4;

		GetHeaderCtrl ().SendMessage (WM_SETFONT,
			(WPARAM) (m_hFont != NULL ? m_hFont : ::GetStockObject (DEFAULT_GUI_FONT)));

		GetHeaderCtrl ().SetWindowPos (NULL, rectClient.left, rectClient.top, 
			rectClient.Width (), m_nHeaderHeight,
			SWP_NOZORDER | SWP_NOACTIVATE);

		HDITEM hdItem;
		hdItem.mask = HDI_WIDTH ;
		hdItem.cxy = m_nLeftColumnWidth + 2;

		GetHeaderCtrl ().SetItem (0, &hdItem);

		hdItem.cxy = rectClient.Width () + 10;
		GetHeaderCtrl ().SetItem (1, &hdItem);

		GetHeaderCtrl ().ShowWindow (SW_SHOWNOACTIVATE);
	}
	else
	{

⌨️ 快捷键说明

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