📄 maindockbar.cpp
字号:
// MainDockBar.cpp: implementation of the CMainDockBar class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "VisualJava.h"
#include "resource.h"
#include "editcmd.h"
#include "MainDockBar.h"
#include "registry.h"
#include "editreg.h"
#include "wm.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#pragma warning ( disable : 4711 )
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMainDockBar::CMainDockBar()
{
// m_pWnd = this;
m_dwFlags = 0;
}
CMainDockBar::~CMainDockBar()
{
}
BEGIN_MESSAGE_MAP (CMainDockBar, baseCAppBar)
//{{AFX_MSG_MAP(CAppBar)
//}}AFX_MSG_MAP
ON_WM_CREATE()
ON_WM_SIZE()
ON_WM_DESTROY()
END_MESSAGE_MAP ()
bool CMainDockBar::CreateBar(LPCTSTR pszName, LPRECT rect, DWORD dwStyle, DWORD nFlags, DWORD id, CFrameWnd *pParent)
{
m_szpName = pszName;
DWORD dwFlags;
POINT ptFloat;
m_dwSCBStyle = dwStyle;
if(LoadPlacement(&dwFlags,&ptFloat))
{
nFlags = dwFlags;
if(ptFloat.x != -1)
rect->left = ptFloat.x;
if(ptFloat.y != -1)
rect->top = ptFloat.y;
if(nFlags & ABS_DOCK)
{
if((nFlags & ABS_DOCK) == ABS_DOCKLEFT || (nFlags & ABS_DOCK) == ABS_DOCKRIGHT)
{
rect->right = rect->left + m_szVert.cx;
rect->bottom = rect->top + m_szVert.cy;
}
else
{
rect->right = rect->left + m_szHorz.cx;
rect->bottom = rect->top + m_szHorz.cy;
}
}
else
{
rect->right = rect->left + m_szFloat.cx;
rect->bottom = rect->top + m_szFloat.cy;
}
}
if(!Create (pszName, pParent, CSize (rect->right - rect->left, rect->bottom - rect->top), nFlags, id))
{
TRACE1 (_T("Failed to create CAppBar \"%s\"\n"), pszName);
return false;
}
SetBarStyle (GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
if(nFlags & (ABS_DOCKABLE | ABS_DOCK))
{
nFlags |= ABS_DOCKABLE;
EnableDocking(CBRS_ALIGN_ANY);
}
m_dwFlags = nFlags;
if(nFlags & ABS_DOCK)
pParent->DockControlBar(this,nFlags & ABS_DOCK);
else
pParent->FloatControlBar(this,CPoint(rect->left,rect->top));
if(!(nFlags & ABS_VISIBLE))
pParent->ShowControlBar(this,FALSE,FALSE);
return true;
}
bool CMainDockBar::LoadPlacement (DWORD *pdwFlags /*= NULL*/, LPPOINT pptFloat /*= NULL*/)
{
CString sName = REGISTRY_ROOT;
sName += CString("Control Bars\\")+GetName ();
if(pdwFlags && !RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("status"), pdwFlags) ||
!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("horzWidth"), (DWORD*) &m_szHorz.cx) ||
!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("horzHeight"), (DWORD*) &m_szHorz.cy) ||
!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("vertWidth"), (DWORD*) &m_szVert.cx) ||
!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("vertHeight"), (DWORD*) &m_szVert.cy) ||
!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("floatWidth"), (DWORD*) &m_szFloat.cx) ||
!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("floatHeight"), (DWORD*) &m_szFloat.cy) ||
pptFloat && (!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("floatLeft"), (DWORD*) &pptFloat->x) ||
!RegLoadNumber (HKEY_CURRENT_USER, sName, _T ("floatTop"), (DWORD*) &pptFloat->y)))
{
return false;
}
if(m_szMin.cx > m_szHorz.cx)
m_szHorz.cx = m_szMin.cx;
if(m_szMin.cy > m_szHorz.cy)
m_szHorz.cy = m_szMin.cy;
if(m_szMin.cx > m_szVert.cx)
m_szVert.cx = m_szMin.cx;
if(m_szMin.cy > m_szVert.cy)
m_szVert.cy = m_szMin.cy;
if(m_szMin.cx > m_szFloat.cx)
m_szFloat.cx = m_szMin.cx;
if(m_szMin.cy > m_szFloat.cy)
m_szFloat.cy = m_szMin.cy;
return true;
}
bool CMainDockBar::SavePlacement()
{
CString sName = REGISTRY_ROOT;
sName += _T("Control Bars\\")+ GetName ();
DWORD dwFlags = m_dwFlags & ~ABS_DOCK;
POINT ptFloat;
if(IsFloating())
{
CRect rc;
CWnd *pWnd = GetDockingFrame();
ASSERT (pWnd);
pWnd->GetWindowRect (rc);
ptFloat = rc.TopLeft ();
}
else
{
dwFlags |= m_nDockBarID;
ptFloat.x = ptFloat.y = -1;
}
if(IsVisible())
dwFlags |= ABS_VISIBLE;
if(RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("status"), dwFlags) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("horzWidth"), m_szHorz.cx) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("horzHeight"), m_szHorz.cy) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("vertWidth"), m_szVert.cx) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("vertHeight"), m_szVert.cy) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("floatWidth"), m_szFloat.cx) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("floatHeight"), m_szFloat.cy) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("floatLeft"), ptFloat.x) &&
RegSaveNumber (HKEY_CURRENT_USER, sName, _T ("floatTop"), ptFloat.y))
{
return true;
}
return false;
}
/////////////////////////////////////////////////////////////////////////////
// CAppBar message handlers
int CMainDockBar::OnCreate (LPCREATESTRUCT lpCreateStruct)
{
if(baseCAppBar::OnCreate (lpCreateStruct) == -1)
return -1;
SetFont (CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT)));
return 0;
}
void CMainDockBar::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler)
{
baseCAppBar::OnUpdateCmdUI(pTarget,bDisableIfNoHndler);
//UNUSED_ALWAYS(bDisableIfNoHndler);
//UNUSED_ALWAYS(pTarget);
/*
if (!HasGripper())
return;
BOOL bNeedPaint = FALSE;
CPoint pt;
::GetCursorPos(&pt);
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);
if (bNeedPaint)
SendMessage(WM_NCPAINT);
*/
}
void CMainDockBar::OnSize (UINT nType, int cx, int cy)
{
baseCAppBar::OnSize (nType, cx, cy);
CWnd* pWnd = GetWindow(GW_CHILD);
while(pWnd != NULL)
{
if(pWnd->IsWindowVisible())
{
pWnd->MoveWindow(0,0,cx,cy);
break;
}
pWnd=pWnd->GetWindow(GW_HWNDNEXT);
}
}
void CMainDockBar::OnDestroy()
{
SavePlacement();
baseCAppBar::OnDestroy();
//STATIC_DOWNCAST(CMDIFrameWnd, AfxGetMainWnd ())->RecalcLayout (FALSE);
}
void CMainDockBar::GetRowInfo(int& nFirst, int& nLast, int& nThis)
{
baseCAppBar::GetRowInfo(nFirst,nLast,nThis);
}
void CMainDockBar::ShowBar()
{
m_pDockSite->ShowControlBar(this, TRUE, FALSE);
}
void CMainDockBar::HideBar()
{
m_pDockSite->ShowControlBar(this, FALSE, FALSE);
}
void CMainDockBar::NcPaintGripper(CDC* pDC, CRect rcClient)
{
_DrawXPgripper(pDC,rcClient);
for (int i = 0; i < CBCGSIZINGCONTROLBAR_BUTTONS_NUM; i ++)
m_Buttons[i].Paint(pDC,IsHorzDocked(),m_bMaximized,m_bIsSingleInRow);
}
void CMainDockBar::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
// if (nHitTest == HTCLOSE)
// m_bShow = !m_bShow;
baseCAppBar::OnNcLButtonUp(nHitTest, point);
}
void CMainDockBar::_DrawXPgripper(CDC* pDC, CRect rcWindow)
{
BOOL bHorz = IsHorzDocked();
CRect rcGrip(rcWindow);
if(bHorz)
{ // right side gripper
rcGrip.left -= m_cyGripper+2;
rcGrip.right = rcGrip.left+m_cyGripper-2;
//rcGrip.DeflateRect(0,1,0,1);
}
else
{ // gripper at top
//rcGrip.left += 1;
rcGrip.top -= m_cyGripper+2;
rcGrip.bottom = rcGrip.top+m_cyGripper-2;
//rcGrip.right -= 1;
}
CBrush Bkbr;
Bkbr.CreateSolidBrush(GetSysColor(COLOR_3DFACE));
CBrush* pOldBrush = pDC->SelectObject(&Bkbr);
pDC->RoundRect(rcGrip,CPoint(3,3));
pDC->SelectObject(pOldBrush);
Bkbr.DeleteObject();
//CFont font;
//font.CreateFont(-11,0,0,0,400,0,0,0,0,1,2,1,34,"Verdana");
//CFont* pfontOld = pDC->SelectObject(&font);
// draw the caption text - first select a font
CFont font;
int ppi = pDC->GetDeviceCaps(LOGPIXELSX);
int pointsize = MulDiv(85, 96, ppi); // 8.5 points at 96 ppi
LOGFONT lf;
BOOL bFont = font.CreatePointFont(pointsize, m_sFontFace);
if(bFont)
{
// get the text color
COLORREF clrCptnText = m_bActive ?
::GetSysColor(COLOR_CAPTIONTEXT) :
::GetSysColor(COLOR_INACTIVECAPTIONTEXT);
int nOldBkMode = pDC->SetBkMode(TRANSPARENT);
COLORREF clrOldText = pDC->SetTextColor(clrCptnText);
if(bHorz)
{
// rotate text 90 degrees CCW if horizontally docked
font.GetLogFont(&lf);
font.DeleteObject();
lf.lfEscapement = 900;
font.CreateFontIndirect(&lf);
}
CFont* pOldFont = pDC->SelectObject(&font);
CString sTitle;
GetWindowText(sTitle);
CPoint ptOrg = bHorz ?
CPoint(rcGrip.left - 1, rcGrip.bottom - 3) :
CPoint(rcGrip.left + 3, rcGrip.top - 1);
pDC->ExtTextOut(ptOrg.x, ptOrg.y,
ETO_CLIPPED, rcGrip, sTitle, NULL);
pDC->SelectObject(pOldFont);
pDC->SetBkMode(nOldBkMode);
pDC->SetTextColor(clrOldText);
}
}
/////////////////////////////////////////////////////////////////////////////
#pragma warning ( default : 4711 )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -