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

📄 bcgptoolbareditboxbutton.cpp

📁 远程网络监视程序的源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	CRect rectBorder;
	GetEditBorder (rectBorder);

	CBCGPVisualManager::GetInstance ()->OnDrawEditBorder (
		pDC, rectBorder, bDisabled, !m_bFlat || m_bIsHotEdit, this);

	if ((m_bTextBelow && bHorz) && !m_strText.IsEmpty())
	{
		//--------------------
		// Draw button's text:
		//--------------------
		BOOL bDisabled = (bCustomizeMode && !IsEditable ()) ||
			(!bCustomizeMode && (m_nStyle & TBBS_DISABLED));

		pDC->SetTextColor (bDisabled ?
							globalData.clrGrayedText : 
								(bHighlight) ? CBCGPToolBar::GetHotTextColor () :
										globalData.clrBtnText);
		CRect rectText = rect;
		rectText.top = (rectBorder.bottom + rect.bottom - m_sizeText.cy) / 2;
		pDC->DrawText (m_strText, &rectText, DT_CENTER | DT_WORDBREAK);
	}
}
//**************************************************************************************
void CBCGPToolbarEditBoxButton::GetEditBorder (CRect& rectBorder)
{
	ASSERT (m_pWndEdit->GetSafeHwnd () != NULL);

	m_pWndEdit->GetWindowRect (rectBorder);
	m_pWndEdit->GetParent ()->ScreenToClient (rectBorder);
	rectBorder.InflateRect (1, 1);
}
//**************************************************************************************
BOOL CBCGPToolbarEditBoxButton::OnClick (CWnd* /*pWnd*/, BOOL /*bDelay*/)
{	
	return m_pWndEdit->GetSafeHwnd () != NULL &&
			(m_pWndEdit->GetStyle () & WS_VISIBLE);
}
//**************************************************************************************
int CBCGPToolbarEditBoxButton::OnDrawOnCustomizeList (
	CDC* pDC, const CRect& rect, BOOL bSelected)
{
	int iWidth = CBCGPToolbarButton::OnDrawOnCustomizeList (pDC, rect, bSelected);

	//------------------------------
	// Simulate editbox appearance:
	//------------------------------
	CRect rectEdit = rect;
	int iEditWidth = rect.Width () - iWidth;

	if (iEditWidth < 8)
	{
		iEditWidth = 8;
	}

	rectEdit.left = rectEdit.right - iEditWidth;
	rectEdit.DeflateRect (2, 3);

	pDC->FillSolidRect (rectEdit, globalData.clrWindow);
	pDC->DrawEdge (&rectEdit, EDGE_SUNKEN, BF_RECT);

	return rect.Width ();
}
//********************************************************************************************
CEdit* CBCGPToolbarEditBoxButton::CreateEdit (CWnd* pWndParent, const CRect& rect)
{
	ASSERT_VALID (this);

	CEdit* pWndEdit = new CBCGPToolbarEditCtrl (*this);
	if (!pWndEdit->Create (m_dwStyle, rect, pWndParent, m_nID))
	{
		delete pWndEdit;
		return NULL;
	}
	return pWndEdit;
}
//****************************************************************************************
void CBCGPToolbarEditBoxButton::OnShow (BOOL bShow)
{
	if (m_pWndEdit->GetSafeHwnd () != NULL)
	{
		if (bShow)
		{
			m_pWndEdit->ShowWindow (SW_SHOWNOACTIVATE);
			OnMove ();
		}
		else
		{
			m_pWndEdit->ShowWindow (SW_HIDE);
		}
	}
}
//*********************************************************************************
void CBCGPToolbarEditBoxButton::SetContents (const CString& sContents)
{
	if (m_strContents == sContents)
		return;

	m_strContents = sContents;
	if (m_pWndEdit != NULL)
	{
		m_bChangingText = TRUE;
		m_pWndEdit->SetWindowText(m_strContents);
		m_bChangingText = FALSE;
	}
}
//*********************************************************************************
const CRect CBCGPToolbarEditBoxButton::GetInvalidateRect () const
{
	if ((m_bTextBelow && m_bHorz) && !m_strText.IsEmpty())
	{
		CRect rect;
		rect.left = (m_rect.left + m_rect.right - m_sizeText.cx) / 2;
		rect.right = (m_rect.left + m_rect.right + m_sizeText.cx) / 2;
		rect.top = m_rect.top;
		rect.bottom = m_rect.bottom + m_rect.top + m_sizeText.cy;
		return rect;
	}
	else
		return m_rect;
}
//*********************************************************************************
CBCGPToolbarEditBoxButton* CBCGPToolbarEditBoxButton::GetByCmd (UINT uiCmd)
{
	CBCGPToolbarEditBoxButton* pSrcEdit = NULL;

	CObList listButtons;
	if (CBCGPToolBar::GetCommandButtons (uiCmd, listButtons) > 0)
	{
		for (POSITION posEdit= listButtons.GetHeadPosition (); pSrcEdit == NULL && posEdit != NULL;)
		{
			CBCGPToolbarEditBoxButton* pEdit= DYNAMIC_DOWNCAST (CBCGPToolbarEditBoxButton, listButtons.GetNext (posEdit));
			ASSERT (pEdit != NULL);

			pSrcEdit = pEdit;
		}
	}

	return pSrcEdit;
}
//*********************************************************************************
BOOL CBCGPToolbarEditBoxButton::SetContentsAll (UINT uiCmd, const CString& strContents)
{
	CBCGPToolbarEditBoxButton* pSrcEdit = GetByCmd (uiCmd);

	if (pSrcEdit)
	{
		pSrcEdit->SetContents (strContents);
	}

	return pSrcEdit != NULL;
}
//*********************************************************************************
CString CBCGPToolbarEditBoxButton::GetContentsAll (UINT uiCmd)
{
	CBCGPToolbarEditBoxButton* pSrcEdit = GetByCmd (uiCmd);
	CString str;

	if (pSrcEdit)
	{
		pSrcEdit->m_pWndEdit->GetWindowText (str);
	}

	return str;
}
//*********************************************************************************
void CBCGPToolbarEditBoxButton::SetStyle (UINT nStyle)
{
	CBCGPToolbarButton::SetStyle (nStyle);

	if (m_pWndEdit != NULL && m_pWndEdit->GetSafeHwnd () != NULL)
	{
		BOOL bDisabled = (CBCGPToolBar::IsCustomizeMode () && !IsEditable ()) ||
			(!CBCGPToolBar::IsCustomizeMode () && (m_nStyle & TBBS_DISABLED));

		m_pWndEdit->EnableWindow (!bDisabled);
	}
}
//**************************************************************************************
void CBCGPToolbarEditBoxButton::SetHotEdit (BOOL bHot)
{
	if (m_bIsHotEdit != bHot)
	{
		m_bIsHotEdit = bHot;

		if (m_pWndEdit->GetParent () != NULL)
		{
			CRect rect = m_rect;

			m_pWndEdit->GetParent ()->InvalidateRect (m_rect);
			m_pWndEdit->GetParent ()->UpdateWindow ();
		}
	}
}
//********************************************************************************
BOOL CBCGPToolbarEditBoxButton::OnUpdateToolTip (CWnd* pWndParent, int iButtonIndex,
												 CToolTipCtrl& wndToolTip, CString& str)
{
	CEdit* pEdit = GetEditBox ();

	if ((pEdit != NULL) && (::IsWindow (pEdit->GetSafeHwnd ())))
	{
		CString strTips;

		if (OnGetCustomToolTipText (strTips))
		{
			wndToolTip.AddTool (pEdit, strTips, NULL, 0);
		}
		else
		{
			wndToolTip.AddTool (pEdit, str, NULL, 0);
		}

		return TRUE;
	}

	return FALSE;
}

/////////////////////////////////////////////////////////////////////////////
// CBCGPToolbarEditCtrl

CBCGPToolbarEditCtrl::CBCGPToolbarEditCtrl(CBCGPToolbarEditBoxButton& edit) :
	m_buttonEdit (edit)
{
	m_bTracked = FALSE;
}

CBCGPToolbarEditCtrl::~CBCGPToolbarEditCtrl()
{
}

BEGIN_MESSAGE_MAP(CBCGPToolbarEditCtrl, CEdit)
	//{{AFX_MSG_MAP(CBCGPToolbarEditCtrl)
	ON_WM_SETFOCUS()
	ON_WM_KILLFOCUS()
	ON_WM_MOUSEMOVE()
	ON_WM_CONTEXTMENU()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBCGPToolbarEditCtrl message handlers

BOOL CBCGPToolbarEditCtrl::PreTranslateMessage(MSG* pMsg) 
{
	if (pMsg->message == WM_KEYDOWN)
	{
		switch (pMsg->wParam)
		{
		case VK_TAB:
			if (GetParent () != NULL)
			{
				ASSERT_VALID (GetParent ());
				GetParent ()->GetNextDlgTabItem (this)->SetFocus ();
				return TRUE;
			}
			break;

		case VK_ESCAPE:
			if (GetTopLevelFrame () != NULL)
			{
				GetTopLevelFrame ()->SetFocus ();
				return TRUE;
			}
			
			break;
		}

		if (GetFocus () == this && GetKeyState (VK_CONTROL) & 0x8000 )
		{
			switch (pMsg->wParam)
			{
			case 'V':
				Paste();
				return TRUE;

			case 'C':
				Copy();
				return TRUE;

			case 'X':
				Cut();
				return TRUE;

			case 'Z':
				Undo();
				return TRUE;

			case VK_DELETE:
				Clear();
				return TRUE;
			}
		}
	}

	return CEdit::PreTranslateMessage(pMsg);
}
//*************************************************************************************
void CBCGPToolbarEditCtrl::OnSetFocus(CWnd* pOldWnd) 
{
	CEdit::OnSetFocus(pOldWnd);
	m_buttonEdit.SetHotEdit (TRUE);
}
//*************************************************************************************
void CBCGPToolbarEditCtrl::OnKillFocus(CWnd* pNewWnd) 
{
	CEdit::OnKillFocus(pNewWnd);
	m_buttonEdit.SetHotEdit (FALSE);
}
//*************************************************************************************
void CBCGPToolbarEditCtrl::OnMouseMove(UINT nFlags, CPoint point) 
{
	CEdit::OnMouseMove(nFlags, point);
	m_buttonEdit.SetHotEdit (TRUE);

	if (!m_bTracked)
	{
		m_bTracked = TRUE;
		
		TRACKMOUSEEVENT trackmouseevent;
		trackmouseevent.cbSize = sizeof(trackmouseevent);
		trackmouseevent.dwFlags = TME_LEAVE;
		trackmouseevent.hwndTrack = GetSafeHwnd();
		trackmouseevent.dwHoverTime = HOVER_DEFAULT;
		::BCGPTrackMouse (&trackmouseevent);
	}
}
//*****************************************************************************************
LRESULT CBCGPToolbarEditCtrl::OnMouseLeave(WPARAM,LPARAM)
{
	m_bTracked = FALSE;

	if (CWnd::GetFocus () != this)
	{
		m_buttonEdit.SetHotEdit (FALSE);
	}

	return 0;
}

void CBCGPToolbarEditCtrl::OnContextMenu(CWnd* pWnd, CPoint point) 
{

		if(m_buttonEdit.m_uiMenuResID != 0)
		{

			CWnd* pWndParent = pWnd->GetParent();

			HINSTANCE hInst = AfxFindResourceHandle (
			MAKEINTRESOURCE (m_buttonEdit.m_uiMenuResID), RT_MENU);

			if(hInst == NULL)
			{
				CEdit::OnContextMenu(pWnd, point) ;
				return;

			}
			
			HMENU hMenu = ::LoadMenu (hInst, MAKEINTRESOURCE (m_buttonEdit.m_uiMenuResID));

			if(hMenu == NULL)
			{
				CEdit::OnContextMenu(pWnd, point) ;
				return;
			}

			HMENU hPopupMenu = ::GetSubMenu(hMenu, 0);

			if(hPopupMenu == NULL)
			{
				CEdit::OnContextMenu(pWnd, point) ;
				return;
			}


				if (g_pContextMenuManager != NULL)
				{
					g_pContextMenuManager->ShowPopupMenu (hPopupMenu, 
											point.x, point.y, pWndParent);

				}
				else
				{
					 ::TrackPopupMenu (hPopupMenu, 
						TPM_CENTERALIGN | TPM_LEFTBUTTON, 
						point.x, point.y, 0, pWndParent->GetSafeHwnd (), NULL);
				}
		}else
		{
			CEdit::OnContextMenu(pWnd, point) ;
		}
}

⌨️ 快捷键说明

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