|
|
1.1 root 1: // bar.cpp : Defines a standard "chiseled" window, and a status bar window.
2: //
3: // This is a part of the Microsoft Foundation Classes C++ library.
4: // Copyright (C) 1992 Microsoft Corporation
5: // All rights reserved.
6: //
7: // This source code is only intended as a supplement to the
8: // Microsoft Foundation Classes Reference and Microsoft
9: // QuickHelp documentation provided with the library.
10: // See these sources for detailed information regarding the
11: // Microsoft Foundation Classes product.
12:
13: #include "multipad.h"
14:
15: #pragma code_seg("_MPTEXT")
16:
17: /////////////////////////////////////////////////////////////////////////////
18: // CBarWnd
19: // See bar.h for details.
20:
21: BEGIN_MESSAGE_MAP(CBarWnd, CWnd)
22: ON_WM_NCPAINT()
23: ON_WM_NCCALCSIZE()
24: END_MESSAGE_MAP()
25:
26: /*static*/ HCURSOR CBarWnd::m_hCursor;
27: /*static*/ CString CBarWnd::m_szRegistration;
28:
29: // Create:
30: // Upon creation, we register our type with Windows as necessary.
31: //
32: BOOL CBarWnd::Create(CWnd* pParentWnd, CRect rect)
33: {
34: if(m_szRegistration.IsEmpty())
35: {
36: m_hCursor = LoadCursor(NULL, IDC_ARROW);
37: m_szRegistration = AfxRegisterWndClass(0, m_hCursor,
38: (HBRUSH)(COLOR_BTNFACE+1), 0);
39: }
40:
41: return CWnd::Create(m_szRegistration, NULL,
42: WS_CHILD | WS_VISIBLE | WS_BORDER, rect, pParentWnd, 0);
43: }
44:
45: // OnNcCalcSize:
46: // We're being asked how large we should be, for a given client rectangle.
47: // We assume we have a border (because our Create gives us one), so we add
48: // that to the rectangle given to us.
49: //
50: void CBarWnd::OnNcCalcSize(NCCALCSIZE_PARAMS FAR* lpcsps)
51: {
52: int cxBorder = GetSystemMetrics(SM_CXBORDER);
53: int cyBorder = GetSystemMetrics(SM_CYBORDER);
54:
55: InflateRect(lpcsps->rgrc, -cxBorder, -(cyBorder * 2));
56: }
57:
58: // OnNCPaint:
59: // Paint the non-client area of a Bar window. This includes the black
60: // border rectangle (WS_BORDER is assumed to be TRUE), a white "border"
61: // near the top and a grey "border" near the bottom, to give us that
62: // chiseled look.
63: //
64: void CBarWnd::OnNcPaint()
65: {
66: CWindowDC dc(this);
67: CRect rc;
68: int cxBorder = GetSystemMetrics(SM_CXBORDER);
69: int cyBorder = GetSystemMetrics(SM_CYBORDER);
70:
71: GetWindowRect(rc);
72: int cxWidth = rc.Width();
73: int cyHeight = rc.Height();
74:
75: CBrush borderBrush(GetSysColor(COLOR_WINDOWFRAME));
76: CBrush* oldBrush = dc.SelectObject(&borderBrush);
77: dc.PatBlt(0, 0, cxWidth, cyBorder, PATCOPY);
78: dc.PatBlt(0, cyBorder, cxBorder, cyHeight - cyBorder * 2, PATCOPY);
79: dc.PatBlt(0, cyHeight - cyBorder, cxWidth, cyBorder, PATCOPY);
80: dc.PatBlt(cxWidth - cxBorder, cyBorder,
81: cxBorder, cyHeight - cyBorder * 2, PATCOPY);
82:
83: dc.PatBlt(cxBorder, cyBorder,
84: cxWidth - cxBorder * 2, cyBorder, WHITENESS);
85:
86: CBrush shadowBrush(GetSysColor(COLOR_BTNSHADOW));
87: dc.SelectObject(&shadowBrush);
88: dc.PatBlt(cxBorder, cyHeight - cyBorder * 2,
89: cxWidth - cxBorder * 2, cyBorder, PATCOPY);
90:
91: dc.SelectObject(oldBrush);
92: }
93:
94: /////////////////////////////////////////////////////////////////////////////
95: // CStatBar
96: // See bar.h for details.
97:
98: BEGIN_MESSAGE_MAP(CStatBar, CBarWnd)
99: ON_WM_PAINT()
100: END_MESSAGE_MAP()
101:
102:
103: BOOL CStatBar::Create(CWnd* pParentWnd, CRect rect)
104: {
105: int cyStatBar;
106: int cyBorder = GetSystemMetrics(SM_CYBORDER);
107:
108: if (!CBarWnd::Create(pParentWnd, rect))
109: return FALSE;
110:
111: m_font.CreateFont(13, 0, 0, 0, 0, FALSE, FALSE, FALSE, ANSI_CHARSET,
112: OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
113: DEFAULT_PITCH | FF_SWISS, NULL);
114:
115: CClientDC dc(this);
116: CFont* oldFont = dc.SelectObject(&m_font);
117: cyStatBar = dc.GetTextExtent("M", 1).cy + 5 * cyBorder + 4;
118: dc.SelectObject(oldFont);
119:
120: SetWindowPos(NULL, 0, 0, rect.right - rect.left, cyStatBar,
121: SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE);
122:
123: return TRUE;
124: }
125:
126:
127: // OnPaint:
128: // A status bar, in addition to the chiseled look of all CBarWnd's, has a
129: // line of text to be displayed.
130: //
131: void CStatBar::OnPaint()
132: {
133: CPaintDC dc(this);
134: CRect rc;
135: int cyBorder = GetSystemMetrics(SM_CYBORDER);
136:
137: GetClientRect(rc);
138:
139: dc.SetBkColor(GetSysColor(COLOR_BTNFACE));
140: CFont* oldFont = dc.SelectObject(&m_font);
141: dc.ExtTextOut(8, 0, ETO_OPAQUE, rc, m_string,
142: m_string.GetLength(), NULL);
143: dc.SelectObject(oldFont);
144: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.