📄 scbarg.cpp
字号:
/////////////////////////////////////////////////////////////////////////
//
// CSizingControlBarG Version 2.43
//
// Created: Jan 24, 1998 Last Modified: August 03, 2000
//
// See the official site at www.datamekanix.com for documentation and
// the latest news.
//
/////////////////////////////////////////////////////////////////////////
// Copyright (C) 1998-2000 by Cristi Posea. All rights reserved.
//
// This code is free for personal and commercial use, providing this
// notice remains intact in the source files and all eventual changes are
// clearly marked with comments.
//
// You must obtain the author's consent before you can include this code
// in a software library.
//
// No warrantee of any kind, express or implied, is included with this
// software; use at your own risk, responsibility for damages (if any) to
// anyone resulting from the use of this software rests entirely with the
// user.
//
// Send bug reports, bug fixes, enhancements, requests, flames, etc. to
// cristi@datamekanix.com or post them at the message board at the site.
/////////////////////////////////////////////////////////////////////////
//
// Class : CSizingControlBarG
//
// Version : 1.0
//
// Created : Jan 4, 2001
//
// Last Modified:
//
// Modify by Francisco Campos
//
// Copyright (C) 2001 by Francisco Campos. All rights reserved.
//
// fcampos@tutopia.com.
//
//
// sizecbar.cpp : implementation file
//
#include "stdafx.h"
#include "..\header\scbarg.h"
#include "resource.h"
#include "GuiDrawLayer.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////
// CSizingControlBarG
IMPLEMENT_DYNAMIC(CSizingControlBarG, baseCSizingControlBarG);
CSizingControlBarG::CSizingControlBarG()
{
m_cyGripper = 17;
m_style=Office97; //style office 97 by default
}
CSizingControlBarG::~CSizingControlBarG()
{
}
BEGIN_MESSAGE_MAP(CSizingControlBarG, baseCSizingControlBarG)
//{{AFX_MSG_MAP(CSizingControlBarG)
ON_WM_NCLBUTTONUP()
ON_WM_NCHITTEST()
ON_COMMAND(WM_SHOWTITLE,ShowCaption)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SETTEXT, OnSetText)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////
// CSizingControlBarG message handlers
/////////////////////////////////////////////////////////////////////////
// Mouse Handling
//
void CSizingControlBarG::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
if (nHitTest == HTCLOSE)
m_pDockSite->ShowControlBar(this, FALSE, FALSE); // hide
baseCSizingControlBarG::OnNcLButtonUp(nHitTest, point);
}
void CSizingControlBarG::ShowCaption()
{
baseCSizingControlBarG::OnNcpaint();
}
void CSizingControlBarG::NcPaintGripper(CDC* pDC, CRect rcClient)
{
if (!HasGripper())
return;
CRect gripper = rcClient;
gripper.top =5;
gripper.bottom =gripper.top +m_cyGripper-1;
if(!m_bActive)
{
CPen cp(PS_SOLID,1,::GetSysColor(COLOR_BTNSHADOW));
CPen* cpold=pDC->SelectObject(&cp);
//linea superior
pDC->MoveTo(gripper.left+1,gripper.top);
pDC->LineTo(gripper.right,gripper.top);
//linea izquierda
pDC->MoveTo(gripper.left,gripper.top+1);
pDC->LineTo(gripper.left,gripper.bottom);
//linea inferior
pDC->MoveTo(gripper.left+1,gripper.bottom);
pDC->LineTo(gripper.right,gripper.bottom);
//linea derecha
pDC->MoveTo(gripper.right,gripper.top+1);
pDC->LineTo(gripper.right,gripper.bottom);
pDC->SelectObject(&cpold);
}
else
{
CBrush cb;
cb.CreateSolidBrush(::GetSysColor(COLOR_ACTIVECAPTION));//GuiDrawLayer::GetRGBCaptionXP());
pDC->FillRect(gripper,&cb);
}
gripper.DeflateRect(1, 1);
CString m_caption;
GetWindowText(m_caption);
CFont m_cfont;
m_cfont.CreateFont(-11,0,0,0,400,0,0,0,0,1,2,1,34,"Verdana");
CFont* m_fontOld=pDC->SelectObject(&m_cfont);
int nMode = pDC->SetBkMode(TRANSPARENT);
CSize SizeCad=pDC->GetTextExtent(m_caption);
CRect rCText=gripper;
rCText.top=6;
rCText.bottom =rCText.top+14;
int cont=SizeCad.cx;
while(cont > 1 && gripper.Width() > 0)
{
CSize coor=pDC->GetTextExtent(m_caption,m_caption.GetLength());
if(coor.cx > gripper.Width()-10)
{
m_caption=m_caption.Left(m_caption.GetLength()-1);
}
else
break;
cont--;
}
if (gripper.Width() > 0 )
if (!m_bActive)
pDC->TextOut(rCText.left+3,rCText.top,m_caption);
else
{
pDC->SetTextColor(RGB(255,255,255));
pDC->TextOut(rCText.left+3,rCText.top,m_caption);
}
pDC->SetBkMode(nMode);
pDC->SelectObject(&m_fontOld);
if (m_bActive)
m_biHide.m_bActive=TRUE;
else
m_biHide.m_bActive=FALSE;
m_biHide.m_Stylo=m_style;
m_biHide.Paint(pDC);
}
void CSizingControlBarG::NcCalcClient(LPRECT pRc, UINT nDockBarID)
{
CRect rcBar(pRc); // save the bar rect
// subtract edges
baseCSizingControlBarG::NcCalcClient(pRc, nDockBarID);
if (!HasGripper())
return;
CRect rc(pRc); // the client rect as calculated by the base class
// rc.DeflateRect(0, m_cyGripper, 0, 0);
// set position for the "x" (hide bar) button
CPoint ptOrgBtn;
ptOrgBtn = CPoint(rc.right - 12, rc.top - 15);
m_biHide.Move(ptOrgBtn - rcBar.TopLeft());
*pRc = rc;
}
UINT CSizingControlBarG::OnNcHitTest(CPoint point)
{
CRect rcBar;
GetWindowRect(rcBar);
UINT nRet = baseCSizingControlBarG::OnNcHitTest(point);
if (nRet != HTCLIENT)
return nRet;
CRect rc = m_biHide.GetRect();
rc.OffsetRect(rcBar.TopLeft());
if (rc.PtInRect(point))
return HTCLOSE;
return HTCLIENT;
}
/////////////////////////////////////////////////////////////////////////
// CSizingControlBarG implementation helpers
void CSizingControlBarG::OnUpdateCmdUI(CFrameWnd* pTarget,
BOOL bDisableIfNoHndler)
{
CPoint pt;
::GetCursorPos(&pt);
BOOL bNeedPaint = FALSE;
UNUSED_ALWAYS(bDisableIfNoHndler);
UNUSED_ALWAYS(pTarget);
if (!HasGripper())
return;
CWnd* pFocus = GetFocus();
BOOL bActiveOld = m_bActive;
m_bActive = (pFocus->GetSafeHwnd() && IsChild(pFocus));
BOOL bHit = (OnNcHitTest(pt) == HTCLOSE);
BOOL bLButtonDown = (::GetKeyState(VK_LBUTTON) < 0);
BOOL bWasPushed = m_biHide.bPushed;
m_biHide.bPushed = bHit && bLButtonDown;
BOOL bWasRaised = m_biHide.bRaised;
m_biHide.bRaised = bHit && !bLButtonDown;
bNeedPaint |= (m_biHide.bPushed ^ bWasPushed) ||
(m_biHide.bRaised ^ bWasRaised)|| (bActiveOld != m_bActive);
if (bNeedPaint)
SendMessage(WM_NCPAINT);
}
/////////////////////////////////////////////////////////////////////////
// CSCBButton
CSCBButton::CSCBButton()
{
bRaised = TRUE;
bPushed = FALSE;
m_bActive=FALSE;
}
void CSCBButton::Paint(CDC* pDC)
{
CRect rc = GetRect();
rc.InflateRect(1,1);
if (bPushed)
pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNSHADOW),
::GetSysColor(COLOR_BTNHIGHLIGHT));
else
{
if (m_Stylo == 1 )
{ //== office 97
rc.InflateRect(1,1);
pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(BLACK_PEN));
CPen Dark(PS_SOLID,1,GetSysColor(COLOR_BTNSHADOW));
CPen* pOld=pDC->SelectObject(&Dark);
pDC->MoveTo(rc.left+1,rc.bottom-2);
pDC->LineTo(rc.right-2,rc.bottom-2);
pDC->MoveTo(rc.right-2,rc.top+1);
pDC->LineTo(rc.right-2,rc.bottom-1);
pDC->SelectObject(&pOld);
}
else if (m_Stylo == 1 && !bRaised) // == office 2000
{
CBrush cbn;
cbn.CreateSysColorBrush(COLOR_BTNFACE);
pDC->FillRect(rc,&cbn);
}
else if (bRaised)
{
pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNHIGHLIGHT),
::GetSysColor(BLACK_PEN));
rc.DeflateRect(1,1);
pDC->Draw3dRect(rc, ::GetSysColor(COLOR_BTNFACE),
::GetSysColor(COLOR_BTNSHADOW));
}
}
COLORREF clrOldTextColor = pDC->GetTextColor();
if(!m_bActive)
pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));
else
pDC->SetTextColor(pDC->SetTextColor(RGB(255,255,255)));
int nPrevBkMode = pDC->SetBkMode(TRANSPARENT);
CFont font;
int ppi = pDC->GetDeviceCaps(LOGPIXELSX);
int pointsize = MulDiv(60, 96, ppi); // 6 points at 96 ppi
font.CreatePointFont(pointsize, _T("Marlett"));
CFont* oldfont = pDC->SelectObject(&font);
pDC->TextOut(ptOrg.x + 2, ptOrg.y + 2, CString(_T("r"))); // x-like
pDC->SelectObject(oldfont);
pDC->SetBkMode(nPrevBkMode);
pDC->SetTextColor(clrOldTextColor);
}
void CSizingControlBarG::setStyleG(StyleG style)
{
m_style=style;
SendMessage(WM_NCPAINT);
}
BOOL CSizingControlBarG::HasGripper() const
{
#if defined(_SCB_MINIFRAME_CAPTION) || !defined(_SCB_REPLACE_MINIFRAME)
// if the miniframe has a caption, don't display the gripper
if (IsFloating())
return FALSE;
#endif //_SCB_MINIFRAME_CAPTION
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -