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

📄 maindockbar.cpp

📁 用bcg库编写的java IDE 源码
💻 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 + -