#pragma once
// CCueBannerEditCtrl
class CCueBannerEditCtrl : public CEdit
{
DECLARE_DYNAMIC(CCueBannerEditCtrl)
public:
CCueBannerEditCtrl();
virtual ~CCueBannerEditCtrl();
protected:
BOOL bShowCueBanner;
BOOL bDrawIfFocused;
CString CueBannerString;
void UpdateCueBanner(BOOL bHide=FALSE);
public:
BOOL SetCueBanner(LPCWSTR lpszText, BOOL fDrawIfFocused = FALSE);
BOOL SetCueBanner(UINT nIDSText, BOOL fDrawIfFocused = FALSE);
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnEnSetfocus();
afx_msg void OnEnKillfocus();
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
BOOL bEnableKbInput;
public:
BOOL EnableKbInput(BOOL bEn);
};
// CueBannerEditCtrl.cpp : 实现文件
//
#include "stdafx.h"
#include "CueBannerEditCtrl.h"
// CCueBannerEditCtrl
IMPLEMENT_DYNAMIC(CCueBannerEditCtrl, CEdit)
CCueBannerEditCtrl::CCueBannerEditCtrl()
{
CueBannerString = _T("");
bDrawIfFocused = FALSE;
bShowCueBanner = FALSE;
bEnableKbInput = FALSE;
}
CCueBannerEditCtrl::~CCueBannerEditCtrl()
{
}
BEGIN_MESSAGE_MAP(CCueBannerEditCtrl, CEdit)
ON_CONTROL_REFLECT(EN_SETFOCUS, OnEnSetfocus)
ON_CONTROL_REFLECT(EN_KILLFOCUS, OnEnKillfocus)
ON_WM_CHAR()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()
// CCueBannerEditCtrl 消息处理程序
BOOL CCueBannerEditCtrl::SetCueBanner(LPCWSTR lpszText, BOOL fDrawIfFocused)
{
CueBannerString = lpszText;
bDrawIfFocused = fDrawIfFocused;
UpdateCueBanner();
return TRUE;
}
BOOL CCueBannerEditCtrl::SetCueBanner(UINT nIDSText, BOOL fDrawIfFocused)
{
CStringW strValue;
if(nIDSText)
VERIFY(strValue.LoadString(nIDSText));
return SetCueBanner(strValue, fDrawIfFocused);
}
void CCueBannerEditCtrl::OnEnSetfocus()
{
// TODO: 在此添加控件通知处理程序代码
if(!CueBannerString.IsEmpty() && !bDrawIfFocused)
{
UpdateCueBanner(TRUE);
}
}
void CCueBannerEditCtrl::OnEnKillfocus()
{
// TODO: 在此添加控件通知处理程序代码
UpdateCueBanner();
}
void CCueBannerEditCtrl::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
UpdateCueBanner(FALSE);
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
void CCueBannerEditCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
CString szWndText;
GetWindowText(szWndText);
if(!szWndText.IsEmpty())
{
CFont *pOldFont = dc.SelectObject( GetParent()->GetFont() );
dc.TextOut(3, 1, szWndText);
dc.SelectObject(pOldFont);
}
CEdit::OnPaint();
}
BOOL CCueBannerEditCtrl::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rcRect;
GetClientRect(rcRect);
COLORREF bkColor = GetSysColor(COLOR_WINDOW);
if(! IsWindowEnabled())
bkColor = GetSysColor(COLOR_3DFACE);
pDC->FillSolidRect(rcRect, bkColor);
if(bShowCueBanner && !CueBannerString.IsEmpty())
{
pDC->SetTextColor( GetSysColor(COLOR_GRAYTEXT) );
int BkMode = pDC->SetBkMode(TRANSPARENT);
CFont *pOldFont = pDC->SelectObject( GetParent()->GetFont() );
pDC->TextOut(3, 1, CueBannerString);
pDC->SelectObject( pOldFont );
pDC->SetBkMode(BkMode);
}
return TRUE;
//return CEdit::OnEraseBkgnd(pDC);
}
void CCueBannerEditCtrl::UpdateCueBanner(BOOL bHide)
{
BOOL bShowSave = bShowCueBanner;
if(bHide)
{
bShowCueBanner = FALSE;
}
else
{
CString szWndText;
GetWindowText(szWndText);
if(szWndText.IsEmpty() && CueBannerString.IsEmpty())
{
bShowCueBanner = TRUE;
}
}
RedrawWindow();
}
void CCueBannerEditCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CEdit::OnLButtonDown(nFlags, point);
UpdateCueBanner();
}
void CCueBannerEditCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CEdit::OnMouseMove(nFlags, point);
if(nFlags & MK_LBUTTON)
{
UpdateCueBanner();
}
}
BOOL CCueBannerEditCtrl::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(!bEnableKbInput)
{
if((pMsg->message >= WM_MOUSEFIRST && pMsg->message <= WM_MOUSELAST)
|| (pMsg->message >= WM_KEYFIRST && pMsg->message <= WM_KEYLAST)
|| 0)
return TRUE;
}
return CEdit::PreTranslateMessage(pMsg);
}
BOOL CCueBannerEditCtrl::EnableKbInput(BOOL bEn)
{
BOOL bRet = bEnableKbInput;
bEnableKbInput = bEn;
return bRet;
}