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

📄 staticex.cpp

📁 用bcg库编写的java IDE 源码
💻 CPP
字号:
// StaticEx.cpp : implementation file
//


#include "stdafx.h"
#include "StaticEx.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CStaticEx
CStaticEx* CStaticEx::m_pThis = NULL;

CStaticEx::CStaticEx()
{
  CStaticEx::m_pThis = this;
}

CStaticEx::CStaticEx(CRelationalCheckList* pBuddy)
{
  CStaticEx::m_pThis = this;
  m_pBuddy = pBuddy;
}

CStaticEx::~CStaticEx()
{
   
}


BEGIN_MESSAGE_MAP(CStaticEx, CWnd)
	//{{AFX_MSG_MAP(CStaticEx)
	ON_WM_PAINT()
	ON_WM_SHOWWINDOW()
	//}}AFX_MSG_MAP
	ON_WM_NCPAINT()
    ON_WM_NCHITTEST()
	ON_WM_NCLBUTTONUP()
    ON_WM_NCCALCSIZE()
    ON_WM_NCLBUTTONDOWN()
	ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
//	

/////////////////////////////////////////////////////////////////////////////
// CStaticEx message handlers


void CStaticEx::OnPaint() 
{
  CPaintDC dc(this); // device context for painting
  CDC mdc;
  CRect rc;

  GetClientRect(&rc);

  mdc.CreateCompatibleDC(&dc);
  CBitmap bm;
  bm.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
  CBitmap* pOldBm = mdc.SelectObject(&bm);


  mdc.FillSolidRect(rc,0x00F0FFF0/*GetSysColor(COLOR_3DFACE)*/);
  dc.BitBlt(0, 0, rc.Width(), rc.Height(), &mdc, 0, 0, SRCCOPY);

  mdc.SelectObject(pOldBm);
  ReleaseDC(&dc);
  bm.DeleteObject();
  mdc.DeleteDC();
}

void CStaticEx::OnNcPaint()
{
    // get window DC that is clipped to the non-client area
    CWindowDC dc(this);

    CRect rcClient, rcBar;
    GetClientRect(rcClient);
    ClientToScreen(rcClient);
    GetWindowRect(rcBar);
	CRect rcSave = rcBar;
    rcClient.OffsetRect(-rcBar.TopLeft());
    rcBar.OffsetRect(-rcBar.TopLeft());

    CDC mdc;
    mdc.CreateCompatibleDC(&dc);
    
    CBitmap bm;
    bm.CreateCompatibleBitmap(&dc, rcBar.Width(), rcBar.Height());
    CBitmap* pOldBm = mdc.SelectObject(&bm);

    // client area is not our bussiness :)
    dc.ExcludeClipRect(rcClient);

    // draw borders in non-client area
    CRect rcDraw = rcBar;
//    DrawBorders(&mdc, rcDraw);

    // erase parts not drawn
    mdc.IntersectClipRect(rcDraw);

    // erase the NC background
	mdc.FillSolidRect(rcDraw,0x0087CEFA);

	//draw close button
	CRect rcClose(rcBar.right-20,2,rcBar.right-20,0);
	rcClose.InflateRect(0,0,15,17);
	mdc.FillSolidRect(rcClose,0x007FFFD4);
	m_rcClose = rcClose;

	//draw close border
	mdc.Draw3dRect(rcClose,0x0000008B,0x0000008B);

    //liners
	CBrush nLinerBrush;
	nLinerBrush.CreateHatchBrush(0,0x00D3D3D3);

	CBrush* pOld = mdc.SelectObject(&nLinerBrush);

	CRect rcLiner(rcBar);
	rcLiner.top = rcClose.top+2;rcLiner.bottom = rcClose.top+2;
	rcLiner.InflateRect(-5,0,-(rcBar.right-rcClose.left+5),5);
	mdc.RoundRect(rcLiner,rcLiner.TopLeft());

	//second liner
	rcLiner.OffsetRect(CPoint(0,rcLiner.Height()+1));
	mdc.RoundRect(rcLiner,rcLiner.TopLeft());

	mdc.SelectObject(pOld);


    COLORREF clrOldTextColor = mdc.GetTextColor();
    mdc.SetTextColor(::GetSysColor(COLOR_BTNTEXT));
    int nPrevBkMode = mdc.SetBkMode(TRANSPARENT);
    CFont font;
    int ppi = mdc.GetDeviceCaps(LOGPIXELSX);
    int pointsize = MulDiv(60, 96, ppi); // 6 points at 96 ppi
    font.CreatePointFont(/*pointsize*/100, _T("Marlett"));
    CFont* oldfont = mdc.SelectObject(&font);

    mdc.TextOut(rcClose.left+1, rcClose.top + 1, CString(_T("r"))); // x-like

    mdc.SelectObject(oldfont);
    mdc.SetBkMode(nPrevBkMode);
    mdc.SetTextColor(clrOldTextColor);


    dc.BitBlt(0, 0, rcBar.Width(), rcBar.Height(), &mdc, 0, 0, SRCCOPY);

    ReleaseDC(&dc);

    mdc.SelectObject(pOldBm);
    bm.DeleteObject();
    mdc.DeleteDC();	
}


void CStaticEx::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp)
{
  // compute the the client area
  CRect rcClient = lpncsp->rgrc[0];
  rcClient.DeflateRect(5,20,5,5);
  lpncsp->rgrc[0] = rcClient;
}

void CStaticEx::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
  //if(m_rcClose.PtInRect(point))
   // m_pBuddy->GetParent()->SendMessage(PN_MESSAGE_UPDATEDATA,(WPARAM)m_pBuddy->m_CurDropDownItem);
}

UINT CStaticEx::OnNcHitTest(CPoint point)
{
  CRect rcBar;
  GetWindowRect(rcBar);
  CRect rcClose(m_rcClose);
  rcClose.OffsetRect(rcBar.TopLeft());


  if(rcClose.PtInRect(point))
	  return HTCLOSE;
  return HTCLIENT;
}


void CStaticEx::OnNcLButtonUp(UINT nHitTest, CPoint point)
{
   if(nHitTest == HTCLOSE)
      HideItems();
}

void CStaticEx::OnLButtonDown(UINT nHitTest, CPoint point)
{
  
}

void CStaticEx::HideItems()
{
   if(m_pBuddy->m_pCurArray != NULL)
   {
     for(int i=0; i<m_pBuddy->m_pCurArray->GetSize(); i++)
	 {
       m_pBuddy->m_pCurArray->GetAt(i)->m_pwnd->ShowWindow(SW_HIDE);
	   m_pBuddy->m_pCurArray->GetAt(i)->m_pwnd->SetParent(m_pBuddy->m_pCurArray->GetAt(i)->m_pwndOrgParent);
	 }
   }
     ShowWindow(SW_HIDE);
}

void CStaticEx::OnShowWindow(BOOL bShow, UINT nStatus) 
{
  if(bShow)
  {
	//lpMouseHook = SetWindowsHookEx(WH_MOUSE,CStaticEx::HookProc,NULL,GetCurrentThreadId());
    m_pBuddy->GetParent()->SendMessage(PN_MESSAGE_LOADDATA,(WPARAM)m_pBuddy->m_CurDropDownItem);
  }
  else
  {
//	ASSERT(UnhookWindowsHookEx(lpMouseHook));
    m_pBuddy->GetParent()->SendMessage(PN_MESSAGE_UPDATEDATA,(WPARAM)m_pBuddy->m_CurDropDownItem);
  }
  CWnd::OnShowWindow(bShow, nStatus);
}



BOOL CStaticEx::PreCreateWindow(CREATESTRUCT& cs)
{
   static CString sClassName;
   if (sClassName.IsEmpty())
      sClassName = AfxRegisterWndClass(0);

   cs.lpszClass = sClassName;
   cs.style = WS_POPUP|WS_BORDER;
   return CWnd::PreCreateWindow(cs);
}

BOOL CStaticEx::Create(CWnd* pParentWnd, UINT nStyle/*=0*/, UINT nID/*=0*/)
{
return CreateEx(0,
      NULL,
      NULL,
      WS_POPUP,
      CRect(),
      pParentWnd,
      nID);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -