File:  [WindowsNT SDKs] / mstools / mfc / samples / multipad / bar.cpp
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs
Thu Aug 9 18:22:34 2018 UTC (7 years, 9 months ago) by root
Branches: msft, MAIN
CVS tags: ntsdk-oct-1992, ntsdk-jul-1993, HEAD
Microsoft Windows NT Build 328 10-12-1992

// bar.cpp : Defines a standard "chiseled" window, and a status bar window.
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and Microsoft
// QuickHelp documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

#include "multipad.h"

#ifndef _NTWIN
#pragma code_seg("_MPTEXT")
#endif

/////////////////////////////////////////////////////////////////////////////
// CBarWnd
// See bar.h for details.

BEGIN_MESSAGE_MAP(CBarWnd, CWnd)
	ON_WM_NCPAINT()
	ON_WM_NCCALCSIZE()
END_MESSAGE_MAP()

/*static*/ HCURSOR CBarWnd::m_hCursor;
/*static*/ CString CBarWnd::m_szRegistration;

// Create:
// Upon creation, we register our type with Windows as necessary.
//
BOOL CBarWnd::Create(CWnd* pParentWnd, CRect rect)
{
	if(m_szRegistration.IsEmpty())
	{
		m_hCursor = LoadCursor(NULL, IDC_ARROW);
		m_szRegistration = AfxRegisterWndClass(0, m_hCursor,
			(HBRUSH)(COLOR_BTNFACE+1), 0);
	}

	return CWnd::Create(m_szRegistration, NULL,
		WS_CHILD | WS_VISIBLE | WS_BORDER, rect, pParentWnd, 0);
}

// OnNcCalcSize:
// We're being asked how large we should be, for a given client rectangle.
// We assume we have a border (because our Create gives us one), so we add
// that to the rectangle given to us.
//
void CBarWnd::OnNcCalcSize(NCCALCSIZE_PARAMS FAR* lpcsps)
{
	int cxBorder = GetSystemMetrics(SM_CXBORDER);
	int cyBorder = GetSystemMetrics(SM_CYBORDER);

	InflateRect(lpcsps->rgrc, -cxBorder, -(cyBorder * 2));
}

// OnNCPaint:
// Paint the non-client area of a Bar window.  This includes the black
// border rectangle (WS_BORDER is assumed to be TRUE), a white "border"
// near the top and a grey "border" near the bottom, to give us that
// chiseled look.
//
void CBarWnd::OnNcPaint()
{
	CWindowDC dc(this);
	CRect rc;
	int cxBorder = GetSystemMetrics(SM_CXBORDER);
	int cyBorder = GetSystemMetrics(SM_CYBORDER);
	
	GetWindowRect(rc);
	int cxWidth = rc.Width();
	int cyHeight = rc.Height();

	CBrush borderBrush(GetSysColor(COLOR_WINDOWFRAME));
	CBrush* oldBrush = dc.SelectObject(&borderBrush);
	dc.PatBlt(0, 0, cxWidth, cyBorder, PATCOPY);
	dc.PatBlt(0, cyBorder, cxBorder, cyHeight - cyBorder * 2, PATCOPY);
	dc.PatBlt(0, cyHeight - cyBorder, cxWidth, cyBorder, PATCOPY);
	dc.PatBlt(cxWidth - cxBorder, cyBorder, 
		cxBorder, cyHeight - cyBorder * 2, PATCOPY);

	dc.PatBlt(cxBorder, cyBorder, 
		cxWidth - cxBorder * 2, cyBorder, WHITENESS);

	CBrush shadowBrush(GetSysColor(COLOR_BTNSHADOW));
	dc.SelectObject(&shadowBrush);
	dc.PatBlt(cxBorder, cyHeight - cyBorder * 2, 
		cxWidth - cxBorder * 2, cyBorder, PATCOPY);

	dc.SelectObject(oldBrush);
}

/////////////////////////////////////////////////////////////////////////////
// CStatBar
// See bar.h for details.

BEGIN_MESSAGE_MAP(CStatBar, CBarWnd)
	ON_WM_PAINT()
END_MESSAGE_MAP()


BOOL CStatBar::Create(CWnd* pParentWnd, CRect rect)
{
	int cyStatBar;
	int cyBorder = GetSystemMetrics(SM_CYBORDER);

	if (!CBarWnd::Create(pParentWnd, rect))
		return FALSE;

	m_font.CreateFont(13, 0, 0, 0, 0, FALSE, FALSE, FALSE, ANSI_CHARSET, 
		OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, 
		DEFAULT_PITCH | FF_SWISS, NULL);

	CClientDC dc(this);
	CFont* oldFont = dc.SelectObject(&m_font);
	cyStatBar = dc.GetTextExtent("M", 1).cy + 5 * cyBorder + 4;
	dc.SelectObject(oldFont);

	SetWindowPos(NULL, 0, 0, rect.right - rect.left, cyStatBar, 
		SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);

	return TRUE;
}


// OnPaint:
// A status bar, in addition to the chiseled look of all CBarWnd's, has a
// line of text to be displayed.
//
void CStatBar::OnPaint()
{
	CPaintDC dc(this);
	CRect rc;
	int cyBorder = GetSystemMetrics(SM_CYBORDER);

	GetClientRect(rc);

	dc.SetBkColor(GetSysColor(COLOR_BTNFACE));
	CFont* oldFont = dc.SelectObject(&m_font);
	dc.ExtTextOut(8, 0, ETO_OPAQUE, rc, m_string, 
				  m_string.GetLength(), NULL);
	dc.SelectObject(oldFont);
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.