Click here to Skip to main content
15,892,298 members
Articles / Desktop Programming / MFC

A Java Language IDE

Rate me:
Please Sign up or sign in to vote.
4.33/5 (26 votes)
13 May 2004CPOL3 min read 80.6K   3.4K   41  
This is a partially implemented IDE for the Java platform.
// 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);
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
biography? I am not that old yet.

Comments and Discussions