📄 bcgptoolbareditboxbutton.cpp
字号:
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 + -