annotate foosdk/wtl/Include/atlgdi.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 // Windows Template Library - WTL version 10.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 // Copyright (C) Microsoft Corporation, WTL Team. All rights reserved.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // This file is a part of the Windows Template Library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 // The use and distribution terms for this software are covered by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 // Microsoft Public License (http://opensource.org/licenses/MS-PL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 // which can be found in the file MS-PL.txt at the root folder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #ifndef __ATLGDI_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #define __ATLGDI_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 #ifndef __ATLAPP_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #error atlgdi.h requires atlapp.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 // protect template members from windowsx.h macros
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 #ifdef _INC_WINDOWSX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 #undef CopyRgn
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 #undef CreateBrush
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 #undef CreatePen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 #undef SelectBrush
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 #undef SelectPen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 #undef SelectFont
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 #undef SelectBitmap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 #endif // _INC_WINDOWSX
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 // required libraries
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 #pragma comment(lib, "msimg32.lib")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 #if !defined(_ATL_NO_OPENGL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 #pragma comment(lib, "opengl32.lib")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 // Classes in this file:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 // CPenT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 // CBrushT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 // CLogFont
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 // CFontT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 // CBitmapT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 // CPaletteT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 // CRgnT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 // CDCT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 // CPaintDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 // CClientDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 // CWindowDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 // CMemoryDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 // CEnhMetaFileInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 // CEnhMetaFileT<t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 // CEnhMetaFileDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 // Bitmap resource helpers to extract bitmap information for a bitmap resource
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 inline LPBITMAPINFOHEADER AtlGetBitmapResourceInfo(HMODULE hModule, ATL::_U_STRINGorID image)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 HRSRC hResource = ::FindResource(hModule, image.m_lpstr, RT_BITMAP);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 ATLASSERT(hResource != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 HGLOBAL hGlobal = ::LoadResource(hModule, hResource);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 ATLASSERT(hGlobal != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 LPBITMAPINFOHEADER pBitmapInfoHeader = (LPBITMAPINFOHEADER)::LockResource(hGlobal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 ATLASSERT(pBitmapInfoHeader != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 return pBitmapInfoHeader;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 inline WORD AtlGetBitmapResourceBitsPerPixel(HMODULE hModule, ATL::_U_STRINGorID image)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 LPBITMAPINFOHEADER pBitmapInfoHeader = AtlGetBitmapResourceInfo(hModule, image);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 ATLASSERT(pBitmapInfoHeader != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 return pBitmapInfoHeader->biBitCount;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 inline WORD AtlGetBitmapResourceBitsPerPixel(ATL::_U_STRINGorID image)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 return AtlGetBitmapResourceBitsPerPixel(ModuleHelper::GetResourceInstance(), image);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 // 32-bit (alpha channel) bitmap resource helper
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 // Note: 32-bit (alpha channel) images work only on Windows XP with Common Controls version 6.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 // If you want your app to work on older version of Windows, load non-alpha images if Common
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 // Controls version is less than 6.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 inline bool AtlIsAlphaBitmapResource(ATL::_U_STRINGorID image)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 return (AtlGetBitmapResourceBitsPerPixel(image) == 32);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 // CPen
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 class CPenT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 HPEN m_hPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 CPenT(HPEN hPen = NULL) : m_hPen(hPen)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 ~CPenT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 if(t_bManaged && (m_hPen != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 CPenT<t_bManaged>& operator =(HPEN hPen)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 Attach(hPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 void Attach(HPEN hPen)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 if(t_bManaged && (m_hPen != NULL) && (m_hPen != hPen))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 ::DeleteObject(m_hPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 m_hPen = hPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 HPEN Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 HPEN hPen = m_hPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 m_hPen = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 return hPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 operator HPEN() const { return m_hPen; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 bool IsNull() const { return (m_hPen == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 // Create methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 ATLASSERT(m_hPen == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 m_hPen = ::CreatePen(nPenStyle, nWidth, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 return m_hPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 HPEN CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 ATLASSERT(m_hPen == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 m_hPen = ::ExtCreatePen(nPenStyle, nWidth, pLogBrush, nStyleCount, lpStyle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 return m_hPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 HPEN CreatePenIndirect(LPLOGPEN lpLogPen)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 ATLASSERT(m_hPen == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 m_hPen = ::CreatePenIndirect(lpLogPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 return m_hPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 BOOL DeleteObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 ATLASSERT(m_hPen != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 BOOL bRet = ::DeleteObject(m_hPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 m_hPen = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 // Attributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 int GetLogPen(LOGPEN* pLogPen) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 ATLASSERT(m_hPen != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 return ::GetObject(m_hPen, sizeof(LOGPEN), pLogPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 bool GetLogPen(LOGPEN& LogPen) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 ATLASSERT(m_hPen != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 return (::GetObject(m_hPen, sizeof(LOGPEN), &LogPen) == sizeof(LOGPEN));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 int GetExtLogPen(EXTLOGPEN* pLogPen, int nSize = sizeof(EXTLOGPEN)) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 ATLASSERT(m_hPen != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 return ::GetObject(m_hPen, nSize, pLogPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 bool GetExtLogPen(EXTLOGPEN& ExtLogPen, int nSize = sizeof(EXTLOGPEN)) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 ATLASSERT(m_hPen != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 int nRet = ::GetObject(m_hPen, nSize, &ExtLogPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 return ((nRet > 0) && (nRet <= nSize));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 typedef CPenT<false> CPenHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 typedef CPenT<true> CPen;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 // CBrush
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 class CBrushT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 HBRUSH m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 CBrushT(HBRUSH hBrush = NULL) : m_hBrush(hBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 ~CBrushT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 if(t_bManaged && (m_hBrush != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 CBrushT<t_bManaged>& operator =(HBRUSH hBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 Attach(hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 void Attach(HBRUSH hBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 if(t_bManaged && (m_hBrush != NULL) && (m_hBrush != hBrush))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234 ::DeleteObject(m_hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 m_hBrush = hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 HBRUSH Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 HBRUSH hBrush = m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 m_hBrush = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 return hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 operator HBRUSH() const { return m_hBrush; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 bool IsNull() const { return (m_hBrush == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 // Create methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 HBRUSH CreateSolidBrush(COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252 ATLASSERT(m_hBrush == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 m_hBrush = ::CreateSolidBrush(crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 return m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 HBRUSH CreateHatchBrush(int nIndex, COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 ATLASSERT(m_hBrush == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 m_hBrush = ::CreateHatchBrush(nIndex, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 return m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 HBRUSH CreateBrushIndirect(const LOGBRUSH* lpLogBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 ATLASSERT(m_hBrush == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 m_hBrush = ::CreateBrushIndirect(lpLogBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 return m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 HBRUSH CreatePatternBrush(HBITMAP hBitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 ATLASSERT(m_hBrush == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 m_hBrush = ::CreatePatternBrush(hBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 return m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 HBRUSH CreateDIBPatternBrush(HGLOBAL hPackedDIB, UINT nUsage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 ATLASSERT(hPackedDIB != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 const void* lpPackedDIB = GlobalLock(hPackedDIB);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 ATLASSERT(lpPackedDIB != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 m_hBrush = ::CreateDIBPatternBrushPt(lpPackedDIB, nUsage);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 GlobalUnlock(hPackedDIB);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 return m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 HBRUSH CreateDIBPatternBrush(const void* lpPackedDIB, UINT nUsage)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 ATLASSERT(m_hBrush == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 m_hBrush = ::CreateDIBPatternBrushPt(lpPackedDIB, nUsage);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 return m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 HBRUSH CreateSysColorBrush(int nIndex)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 ATLASSERT(m_hBrush == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 m_hBrush = ::GetSysColorBrush(nIndex);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 return m_hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 BOOL DeleteObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 ATLASSERT(m_hBrush != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 BOOL bRet = ::DeleteObject(m_hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 m_hBrush = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 // Attributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 int GetLogBrush(LOGBRUSH* pLogBrush) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 ATLASSERT(m_hBrush != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 return ::GetObject(m_hBrush, sizeof(LOGBRUSH), pLogBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 bool GetLogBrush(LOGBRUSH& LogBrush) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 ATLASSERT(m_hBrush != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 return (::GetObject(m_hBrush, sizeof(LOGBRUSH), &LogBrush) == sizeof(LOGBRUSH));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 typedef CBrushT<false> CBrushHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 typedef CBrushT<true> CBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 // CFont
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 class CLogFont : public LOGFONT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 CLogFont()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 memset(this, 0, sizeof(LOGFONT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 CLogFont(const LOGFONT& lf)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 Copy(&lf);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 CLogFont(HFONT hFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 ATLASSERT(::GetObjectType(hFont) == OBJ_FONT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 ::GetObject(hFont, sizeof(LOGFONT), (LOGFONT*)this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 HFONT CreateFontIndirect()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 return ::CreateFontIndirect(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 void SetBold()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 lfWeight = FW_BOLD;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 bool IsBold() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 return (lfWeight >= FW_BOLD);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 void MakeBolder(int iScale = 1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 lfWeight += FW_BOLD * iScale;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 void MakeLarger(int iScale)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 if(lfHeight > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 lfHeight += iScale;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 lfHeight -= iScale;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 void SetHeight(LONG nPointSize, HDC hDC = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 // For MM_TEXT mapping mode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 lfHeight = -::MulDiv(nPointSize, ::GetDeviceCaps(hDC1, LOGPIXELSY), 72);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 if(hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 ::ReleaseDC(NULL, hDC1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 LONG GetHeight(HDC hDC = NULL) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 // For MM_TEXT mapping mode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 LONG nPointSize = ::MulDiv(-lfHeight, 72, ::GetDeviceCaps(hDC1, LOGPIXELSY));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 if(hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 ::ReleaseDC(NULL, hDC1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 return nPointSize;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 LONG GetDeciPointHeight(HDC hDC = NULL) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 POINT ptOrg = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 ::DPtoLP(hDC1, &ptOrg, 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 POINT pt = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 pt.y = abs(lfHeight) + ptOrg.y;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 ::LPtoDP(hDC1, &pt, 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 LONG nDeciPoint = ::MulDiv(pt.y, 720, ::GetDeviceCaps(hDC1, LOGPIXELSY)); // 72 points/inch, 10 decipoints/point
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 if(hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 ::ReleaseDC(NULL, hDC1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 return nDeciPoint;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 void SetHeightFromDeciPoint(LONG nDeciPtHeight, HDC hDC = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 POINT pt = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 pt.y = ::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), nDeciPtHeight, 720); // 72 points/inch, 10 decipoints/point
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 ::DPtoLP(hDC1, &pt, 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 POINT ptOrg = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 ::DPtoLP(hDC1, &ptOrg, 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 lfHeight = -abs(pt.y - ptOrg.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 if(hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 ::ReleaseDC(NULL, hDC1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 void SetCaptionFont()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 NONCLIENTMETRICS ncm = { RunTimeHelper::SizeOf_NONCLIENTMETRICS() };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 ATLVERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 Copy(&ncm.lfCaptionFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 void SetMenuFont()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 NONCLIENTMETRICS ncm = { RunTimeHelper::SizeOf_NONCLIENTMETRICS() };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 ATLVERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 Copy(&ncm.lfMenuFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 void SetStatusFont()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 NONCLIENTMETRICS ncm = { RunTimeHelper::SizeOf_NONCLIENTMETRICS() };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 ATLVERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 Copy(&ncm.lfStatusFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 void SetMessageBoxFont()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 NONCLIENTMETRICS ncm = { RunTimeHelper::SizeOf_NONCLIENTMETRICS() };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 ATLVERIFY(::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(ncm), &ncm, 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 Copy(&ncm.lfMessageFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 void Copy(const LOGFONT* pLogFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 ATLASSERT(pLogFont != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 *(LOGFONT*)this = *pLogFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 CLogFont& operator =(const CLogFont& src)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 Copy(&src);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 CLogFont& operator =(const LOGFONT& src)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 Copy(&src);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 CLogFont& operator =(HFONT hFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 ATLASSERT(::GetObjectType(hFont) == OBJ_FONT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 ::GetObject(hFont, sizeof(LOGFONT), (LOGFONT*)this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 bool operator ==(const LOGFONT& logfont) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 return((logfont.lfHeight == lfHeight) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 (logfont.lfWidth == lfWidth) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 (logfont.lfEscapement == lfEscapement) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 (logfont.lfOrientation == lfOrientation) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 (logfont.lfWeight == lfWeight) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 (logfont.lfItalic == lfItalic) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 (logfont.lfUnderline == lfUnderline) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 (logfont.lfStrikeOut == lfStrikeOut) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 (logfont.lfCharSet == lfCharSet) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 (logfont.lfOutPrecision == lfOutPrecision) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 (logfont.lfClipPrecision == lfClipPrecision) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 (logfont.lfQuality == lfQuality) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 (logfont.lfPitchAndFamily == lfPitchAndFamily) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 (lstrcmp(logfont.lfFaceName, lfFaceName) == 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 class CFontT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 HFONT m_hFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 CFontT(HFONT hFont = NULL) : m_hFont(hFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 ~CFontT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 if(t_bManaged && (m_hFont != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 CFontT<t_bManaged>& operator =(HFONT hFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 Attach(hFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 void Attach(HFONT hFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 if(t_bManaged && (m_hFont != NULL) && (m_hFont != hFont))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 ::DeleteObject(m_hFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 m_hFont = hFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 HFONT Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 HFONT hFont = m_hFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 m_hFont = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 return hFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 operator HFONT() const { return m_hFont; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 bool IsNull() const { return (m_hFont == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 // Create methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 HFONT CreateFontIndirect(const LOGFONT* lpLogFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 ATLASSERT(m_hFont == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 m_hFont = ::CreateFontIndirect(lpLogFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 return m_hFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 HFONT CreateFontIndirectEx(CONST ENUMLOGFONTEXDV* penumlfex)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 ATLASSERT(m_hFont == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 m_hFont = ::CreateFontIndirectEx(penumlfex);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 return m_hFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 HFONT CreateFont(int nHeight, int nWidth, int nEscapement,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 LPCTSTR lpszFacename)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 ATLASSERT(m_hFont == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 m_hFont = ::CreateFont(nHeight, nWidth, nEscapement,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 nOrientation, nWeight, bItalic, bUnderline, cStrikeOut,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 nCharSet, nOutPrecision, nClipPrecision, nQuality,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 nPitchAndFamily, lpszFacename);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 return m_hFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 HFONT CreatePointFont(int nPointSize, LPCTSTR lpszFaceName, HDC hDC = NULL, bool bBold = false, bool bItalic = false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 LOGFONT logFont = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 logFont.lfCharSet = DEFAULT_CHARSET;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 logFont.lfHeight = nPointSize;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 ATL::Checked::tcsncpy_s(logFont.lfFaceName, _countof(logFont.lfFaceName), lpszFaceName, _TRUNCATE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 if(bBold)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 logFont.lfWeight = FW_BOLD;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 if(bItalic)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 logFont.lfItalic = (BYTE)TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 return CreatePointFontIndirect(&logFont, hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 HFONT CreatePointFontIndirect(const LOGFONT* lpLogFont, HDC hDC = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 HDC hDC1 = (hDC != NULL) ? hDC : ::GetDC(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 // convert nPointSize to logical units based on hDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 LOGFONT logFont = *lpLogFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 POINT pt = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 pt.y = ::MulDiv(::GetDeviceCaps(hDC1, LOGPIXELSY), logFont.lfHeight, 720); // 72 points/inch, 10 decipoints/point
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 ::DPtoLP(hDC1, &pt, 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 POINT ptOrg = { 0, 0 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 ::DPtoLP(hDC1, &ptOrg, 1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 logFont.lfHeight = -abs(pt.y - ptOrg.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 if(hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 ::ReleaseDC(NULL, hDC1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 return CreateFontIndirect(&logFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 BOOL DeleteObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606 ATLASSERT(m_hFont != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 BOOL bRet = ::DeleteObject(m_hFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 m_hFont = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 // Attributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 int GetLogFont(LOGFONT* pLogFont) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 ATLASSERT(m_hFont != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 return ::GetObject(m_hFont, sizeof(LOGFONT), pLogFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 bool GetLogFont(LOGFONT& LogFont) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 ATLASSERT(m_hFont != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 return (::GetObject(m_hFont, sizeof(LOGFONT), &LogFont) == sizeof(LOGFONT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 typedef CFontT<false> CFontHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 typedef CFontT<true> CFont;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 // CBitmap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 class CBitmapT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 HBITMAP m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 CBitmapT(HBITMAP hBitmap = NULL) : m_hBitmap(hBitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 ~CBitmapT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 if(t_bManaged && (m_hBitmap != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 CBitmapT<t_bManaged>& operator =(HBITMAP hBitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 Attach(hBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 void Attach(HBITMAP hBitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 if(t_bManaged && (m_hBitmap != NULL) && (m_hBitmap != hBitmap))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 ::DeleteObject(m_hBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 m_hBitmap = hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 HBITMAP Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 HBITMAP hBitmap = m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 m_hBitmap = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 return hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 operator HBITMAP() const { return m_hBitmap; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 bool IsNull() const { return (m_hBitmap == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 // Create and load methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 HBITMAP LoadBitmap(ATL::_U_STRINGorID bitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 m_hBitmap = ::LoadBitmap(ModuleHelper::GetResourceInstance(), bitmap.m_lpstr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 HBITMAP LoadOEMBitmap(UINT nIDBitmap) // for OBM_/OCR_/OIC_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 m_hBitmap = ::LoadBitmap(NULL, MAKEINTRESOURCE(nIDBitmap));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 HBITMAP LoadMappedBitmap(UINT nIDBitmap, UINT nFlags = 0, LPCOLORMAP lpColorMap = NULL, int nMapSize = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 m_hBitmap = ::CreateMappedBitmap(ModuleHelper::GetResourceInstance(), nIDBitmap, (WORD)nFlags, lpColorMap, nMapSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 HBITMAP CreateBitmap(int nWidth, int nHeight, UINT nPlanes, UINT nBitsPerPixel, const void* lpBits)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 m_hBitmap = ::CreateBitmap(nWidth, nHeight, nPlanes, nBitsPerPixel, lpBits);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 HBITMAP CreateBitmapIndirect(LPBITMAP lpBitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 m_hBitmap = ::CreateBitmapIndirect(lpBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 HBITMAP CreateCompatibleBitmap(HDC hDC, int nWidth, int nHeight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714 m_hBitmap = ::CreateCompatibleBitmap(hDC, nWidth, nHeight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 HBITMAP CreateDiscardableBitmap(HDC hDC, int nWidth, int nHeight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 m_hBitmap = ::CreateDiscardableBitmap(hDC, nWidth, nHeight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 BOOL DeleteObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 BOOL bRet = ::DeleteObject(m_hBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730 m_hBitmap = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 // Attributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 int GetBitmap(BITMAP* pBitMap) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 return ::GetObject(m_hBitmap, sizeof(BITMAP), pBitMap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 bool GetBitmap(BITMAP& bm) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 return (::GetObject(m_hBitmap, sizeof(BITMAP), &bm) == sizeof(BITMAP));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 bool GetSize(SIZE& size) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 BITMAP bm = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 if(!GetBitmap(&bm))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 size.cx = bm.bmWidth;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754 size.cy = bm.bmHeight;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 DWORD GetBitmapBits(DWORD dwCount, LPVOID lpBits) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761 return ::GetBitmapBits(m_hBitmap, dwCount, lpBits);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 DWORD SetBitmapBits(DWORD dwCount, const void* lpBits)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 return ::SetBitmapBits(m_hBitmap, dwCount, lpBits);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770 BOOL GetBitmapDimension(LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 return ::GetBitmapDimensionEx(m_hBitmap, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 BOOL SetBitmapDimension(int nWidth, int nHeight, LPSIZE lpSize = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779 return ::SetBitmapDimensionEx(m_hBitmap, nWidth, nHeight, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 // DIB support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783 HBITMAP CreateDIBitmap(HDC hDC, CONST BITMAPINFOHEADER* lpbmih, DWORD dwInit, CONST VOID* lpbInit, CONST BITMAPINFO* lpbmi, UINT uColorUse)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 m_hBitmap = ::CreateDIBitmap(hDC, lpbmih, dwInit, lpbInit, lpbmi, uColorUse);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 HBITMAP CreateDIBSection(HDC hDC, CONST BITMAPINFO* lpbmi, UINT uColorUse, VOID** ppvBits, HANDLE hSection, DWORD dwOffset)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 ATLASSERT(m_hBitmap == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 m_hBitmap = ::CreateDIBSection(hDC, lpbmi, uColorUse, ppvBits, hSection, dwOffset);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794 return m_hBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797 int GetDIBits(HDC hDC, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbmi, UINT uColorUse) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800 return ::GetDIBits(hDC, m_hBitmap, uStartScan, cScanLines, lpvBits, lpbmi, uColorUse);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803 int SetDIBits(HDC hDC, UINT uStartScan, UINT cScanLines, CONST VOID* lpvBits, CONST BITMAPINFO* lpbmi, UINT uColorUse)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 ATLASSERT(m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 return ::SetDIBits(hDC, m_hBitmap, uStartScan, cScanLines, lpvBits, lpbmi, uColorUse);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810 typedef CBitmapT<false> CBitmapHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811 typedef CBitmapT<true> CBitmap;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815 // CPalette
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 class CPaletteT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822 HPALETTE m_hPalette;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825 CPaletteT(HPALETTE hPalette = NULL) : m_hPalette(hPalette)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 ~CPaletteT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830 if(t_bManaged && (m_hPalette != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 CPaletteT<t_bManaged>& operator =(HPALETTE hPalette)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 Attach(hPalette);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 void Attach(HPALETTE hPalette)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 if(t_bManaged && (m_hPalette != NULL) && (m_hPalette != hPalette))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 ::DeleteObject(m_hPalette);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 m_hPalette = hPalette;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 HPALETTE Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849 HPALETTE hPalette = m_hPalette;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850 m_hPalette = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851 return hPalette;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854 operator HPALETTE() const { return m_hPalette; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 bool IsNull() const { return (m_hPalette == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858 // Create methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 HPALETTE CreatePalette(LPLOGPALETTE lpLogPalette)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 ATLASSERT(m_hPalette == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 m_hPalette = ::CreatePalette(lpLogPalette);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 return m_hPalette;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 HPALETTE CreateHalftonePalette(HDC hDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 ATLASSERT(m_hPalette == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 ATLASSERT(hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 m_hPalette = ::CreateHalftonePalette(hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 return m_hPalette;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 BOOL DeleteObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 ATLASSERT(m_hPalette != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 BOOL bRet = ::DeleteObject(m_hPalette);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 m_hPalette = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 // Attributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 int GetEntryCount() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 ATLASSERT(m_hPalette != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 WORD nEntries = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 ::GetObject(m_hPalette, sizeof(WORD), &nEntries);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889 return (int)nEntries;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892 UINT GetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894 ATLASSERT(m_hPalette != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 return ::GetPaletteEntries(m_hPalette, nStartIndex, nNumEntries, lpPaletteColors);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 UINT SetPaletteEntries(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 ATLASSERT(m_hPalette != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 return ::SetPaletteEntries(m_hPalette, nStartIndex, nNumEntries, lpPaletteColors);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905 void AnimatePalette(UINT nStartIndex, UINT nNumEntries, LPPALETTEENTRY lpPaletteColors)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 ATLASSERT(m_hPalette != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 ::AnimatePalette(m_hPalette, nStartIndex, nNumEntries, lpPaletteColors);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 BOOL ResizePalette(UINT nNumEntries)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 ATLASSERT(m_hPalette != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 return ::ResizePalette(m_hPalette, nNumEntries);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 UINT GetNearestPaletteIndex(COLORREF crColor) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 ATLASSERT(m_hPalette != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 return ::GetNearestPaletteIndex(m_hPalette, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 typedef CPaletteT<false> CPaletteHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 typedef CPaletteT<true> CPalette;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929 // CRgn
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932 class CRgnT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 HRGN m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939 CRgnT(HRGN hRgn = NULL) : m_hRgn(hRgn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 ~CRgnT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 if(t_bManaged && (m_hRgn != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948 CRgnT<t_bManaged>& operator =(HRGN hRgn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950 Attach(hRgn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 void Attach(HRGN hRgn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956 if(t_bManaged && (m_hRgn != NULL) && (m_hRgn != hRgn))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 ::DeleteObject(m_hRgn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 m_hRgn = hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 HRGN Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963 HRGN hRgn = m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 m_hRgn = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965 return hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968 operator HRGN() const { return m_hRgn; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 bool IsNull() const { return (m_hRgn == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 // Create methods
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 HRGN CreateRectRgn(int x1, int y1, int x2, int y2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976 m_hRgn = ::CreateRectRgn(x1, y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980 HRGN CreateRectRgnIndirect(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 m_hRgn = ::CreateRectRgnIndirect(lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987 HRGN CreateEllipticRgn(int x1, int y1, int x2, int y2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990 m_hRgn = ::CreateEllipticRgn(x1, y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994 HRGN CreateEllipticRgnIndirect(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 m_hRgn = ::CreateEllipticRgnIndirect(lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001 HRGN CreatePolygonRgn(const POINT* lpPoints, int nCount, int nMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 m_hRgn = ::CreatePolygonRgn(lpPoints, nCount, nMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008 HRGN CreatePolyPolygonRgn(const POINT* lpPoints, const INT* lpPolyCounts, int nCount, int nPolyFillMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 m_hRgn = ::CreatePolyPolygonRgn(lpPoints, lpPolyCounts, nCount, nPolyFillMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015 HRGN CreateRoundRectRgn(int x1, int y1, int x2, int y2, int x3, int y3)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 m_hRgn = ::CreateRoundRectRgn(x1, y1, x2, y2, x3, y3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 HRGN CreateFromPath(HDC hDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025 ATLASSERT(hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 m_hRgn = ::PathToRegion(hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030 HRGN CreateFromData(const XFORM* lpXForm, int nCount, const RGNDATA* pRgnData)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032 ATLASSERT(m_hRgn == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 m_hRgn = ::ExtCreateRegion(lpXForm, nCount, pRgnData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 return m_hRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 BOOL DeleteObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040 BOOL bRet = ::DeleteObject(m_hRgn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042 m_hRgn = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 void SetRectRgn(int x1, int y1, int x2, int y2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 ::SetRectRgn(m_hRgn, x1, y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053 void SetRectRgn(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056 ::SetRectRgn(m_hRgn, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059 int CombineRgn(HRGN hRgnSrc1, HRGN hRgnSrc2, int nCombineMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 return ::CombineRgn(m_hRgn, hRgnSrc1, hRgnSrc2, nCombineMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065 int CombineRgn(HRGN hRgnSrc, int nCombineMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 return ::CombineRgn(m_hRgn, m_hRgn, hRgnSrc, nCombineMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071 int CopyRgn(HRGN hRgnSrc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 return ::CombineRgn(m_hRgn, hRgnSrc, NULL, RGN_COPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077 BOOL EqualRgn(HRGN hRgn) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080 return ::EqualRgn(m_hRgn, hRgn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083 int OffsetRgn(int x, int y)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086 return ::OffsetRgn(m_hRgn, x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089 int OffsetRgn(POINT point)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092 return ::OffsetRgn(m_hRgn, point.x, point.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095 int GetRgnBox(LPRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098 return ::GetRgnBox(m_hRgn, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101 BOOL PtInRegion(int x, int y) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1104 return ::PtInRegion(m_hRgn, x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1105 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1106
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1107 BOOL PtInRegion(POINT point) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1108 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1109 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1110 return ::PtInRegion(m_hRgn, point.x, point.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1111 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1112
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1113 BOOL RectInRegion(LPCRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1114 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1115 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1116 return ::RectInRegion(m_hRgn, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1117 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1118
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1119 int GetRegionData(LPRGNDATA lpRgnData, int nDataSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1120 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1121 ATLASSERT(m_hRgn != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1122 return (int)::GetRegionData(m_hRgn, nDataSize, lpRgnData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1123 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1124 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1125
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1126 typedef CRgnT<false> CRgnHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1127 typedef CRgnT<true> CRgn;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1129
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1130 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1131 // CDC - The device context class
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1132
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1133 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1134 class CDCT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1135 typedef CDCT<false> CDCHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1136 typedef CDCT<true> CDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1137
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1138 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1139 class CDCT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1140 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1141 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1142 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1143 HDC m_hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1144
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1145 // Constructor/destructor/operators
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1146 CDCT(HDC hDC = NULL) : m_hDC(hDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1147 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1148 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1149
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1150 ~CDCT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1151 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1152 if(t_bManaged && (m_hDC != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1153 ::DeleteDC(Detach());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1154 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1156 CDCT<t_bManaged>& operator =(HDC hDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1157 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1158 Attach(hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1159 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1160 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1161
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1162 void Attach(HDC hDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1163 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1164 if(t_bManaged && (m_hDC != NULL) && (m_hDC != hDC))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1165 ::DeleteDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1166 m_hDC = hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1167 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1168
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1169 HDC Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1170 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1171 HDC hDC = m_hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1172 m_hDC = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1173 return hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1174 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1175
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1176 operator HDC() const { return m_hDC; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1177
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1178 bool IsNull() const { return (m_hDC == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1179
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1180 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1181 HWND WindowFromDC() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1182 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1183 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1184 return ::WindowFromDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1185 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1187 CPenHandle GetCurrentPen() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1188 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1189 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1190 return CPenHandle((HPEN)::GetCurrentObject(m_hDC, OBJ_PEN));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1191 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1192
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1193 CBrushHandle GetCurrentBrush() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1194 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1195 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1196 return CBrushHandle((HBRUSH)::GetCurrentObject(m_hDC, OBJ_BRUSH));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1197 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1198
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1199 CPaletteHandle GetCurrentPalette() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1200 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1201 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1202 return CPaletteHandle((HPALETTE)::GetCurrentObject(m_hDC, OBJ_PAL));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1203 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1204
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1205 CFontHandle GetCurrentFont() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1206 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1207 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1208 return CFontHandle((HFONT)::GetCurrentObject(m_hDC, OBJ_FONT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1209 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1210
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1211 CBitmapHandle GetCurrentBitmap() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1212 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1213 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1214 return CBitmapHandle((HBITMAP)::GetCurrentObject(m_hDC, OBJ_BITMAP));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1215 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1216
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1217 HDC CreateDC(LPCTSTR lpszDriverName, LPCTSTR lpszDeviceName, LPCTSTR lpszOutput, const DEVMODE* lpInitData)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1218 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1219 ATLASSERT(m_hDC == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1220 m_hDC = ::CreateDC(lpszDriverName, lpszDeviceName, lpszOutput, lpInitData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1221 return m_hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1222 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1223
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1224 HDC CreateCompatibleDC(HDC hDC = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1225 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1226 ATLASSERT(m_hDC == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1227 m_hDC = ::CreateCompatibleDC(hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1228 return m_hDC;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1229 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1230
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1231 BOOL DeleteDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1232 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1233 if(m_hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1234 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1235 BOOL bRet = ::DeleteDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1236 if(bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1237 m_hDC = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1238 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1239 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1240
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1241 // Device-Context Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1242 int SaveDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1243 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1244 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1245 return ::SaveDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1246 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1247
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1248 BOOL RestoreDC(int nSavedDC)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1249 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1250 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1251 return ::RestoreDC(m_hDC, nSavedDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1252 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1253
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1254 int GetDeviceCaps(int nIndex) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1255 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1256 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1257 return ::GetDeviceCaps(m_hDC, nIndex);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1258 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1259
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1260 UINT SetBoundsRect(LPCRECT lpRectBounds, UINT flags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1261 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1262 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1263 return ::SetBoundsRect(m_hDC, lpRectBounds, flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1264 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1265
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1266 UINT GetBoundsRect(LPRECT lpRectBounds, UINT flags) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1267 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1268 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1269 return ::GetBoundsRect(m_hDC, lpRectBounds, flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1270 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1271
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1272 BOOL ResetDC(const DEVMODE* lpDevMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1273 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1274 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1275 return ::ResetDC(m_hDC, lpDevMode) != NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1276 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1277
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1278 // Drawing-Tool Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1279 BOOL GetBrushOrg(LPPOINT lpPoint) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1280 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1281 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1282 return ::GetBrushOrgEx(m_hDC, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1283 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1284
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1285 BOOL SetBrushOrg(int x, int y, LPPOINT lpPoint = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1286 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1287 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1288 return ::SetBrushOrgEx(m_hDC, x, y, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1289 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1290
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1291 BOOL SetBrushOrg(POINT point, LPPOINT lpPointRet = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1292 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1293 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1294 return ::SetBrushOrgEx(m_hDC, point.x, point.y, lpPointRet);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1295 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1296
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1297 int EnumObjects(int nObjectType, int (CALLBACK* lpfn)(LPVOID, LPARAM), LPARAM lpData)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1298 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1299 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1300 #ifdef STRICT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1301 return ::EnumObjects(m_hDC, nObjectType, (GOBJENUMPROC)lpfn, lpData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1302 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1303 return ::EnumObjects(m_hDC, nObjectType, (GOBJENUMPROC)lpfn, (LPVOID)lpData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1304 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1305 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1306
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1307 // Type-safe selection helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1308 HPEN SelectPen(HPEN hPen)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1309 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1310 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1311 ATLASSERT((hPen == NULL) || (::GetObjectType(hPen) == OBJ_PEN) || (::GetObjectType(hPen) == OBJ_EXTPEN));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1312 return (HPEN)::SelectObject(m_hDC, hPen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1313 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1314
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1315 HBRUSH SelectBrush(HBRUSH hBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1316 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1317 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1318 ATLASSERT((hBrush == NULL) || (::GetObjectType(hBrush) == OBJ_BRUSH));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1319 return (HBRUSH)::SelectObject(m_hDC, hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1320 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1321
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1322 HFONT SelectFont(HFONT hFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1323 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1324 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1325 ATLASSERT((hFont == NULL) || (::GetObjectType(hFont) == OBJ_FONT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1326 return (HFONT)::SelectObject(m_hDC, hFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1327 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1328
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1329 HBITMAP SelectBitmap(HBITMAP hBitmap)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1330 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1331 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1332 ATLASSERT((hBitmap == NULL) || (::GetObjectType(hBitmap) == OBJ_BITMAP));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1333 return (HBITMAP)::SelectObject(m_hDC, hBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1334 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1335
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1336 int SelectRgn(HRGN hRgn) // special return for regions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1337 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1338 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1339 ATLASSERT((hRgn == NULL) || (::GetObjectType(hRgn) == OBJ_REGION));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1340 return PtrToInt(::SelectObject(m_hDC, hRgn));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1341 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1342
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1343 // Type-safe selection helpers for stock objects
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1344 HPEN SelectStockPen(int nPen)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1345 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1346 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1347 ATLASSERT((nPen == WHITE_PEN) || (nPen == BLACK_PEN) || (nPen == NULL_PEN) || (nPen == DC_PEN));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1348 return SelectPen((HPEN)::GetStockObject(nPen));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1349 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1350
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1351 HBRUSH SelectStockBrush(int nBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1352 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1353 ATLASSERT(((nBrush >= WHITE_BRUSH) && (nBrush <= HOLLOW_BRUSH)) || (nBrush == DC_BRUSH));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1354 return SelectBrush((HBRUSH)::GetStockObject(nBrush));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1355 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1357 HFONT SelectStockFont(int nFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1358 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1359 ATLASSERT(((nFont >= OEM_FIXED_FONT) && (nFont <= SYSTEM_FIXED_FONT)) || (nFont == DEFAULT_GUI_FONT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1360 return SelectFont((HFONT)::GetStockObject(nFont));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1361 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1362
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1363 HPALETTE SelectStockPalette(int nPalette, BOOL bForceBackground)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1364 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1365 ATLASSERT(nPalette == DEFAULT_PALETTE); // the only one supported
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1366 return SelectPalette((HPALETTE)::GetStockObject(nPalette), bForceBackground);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1367 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1368
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1369 // Color and Color Palette Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1370 COLORREF GetNearestColor(COLORREF crColor) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1371 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1372 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1373 return ::GetNearestColor(m_hDC, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1374 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1375
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1376 HPALETTE SelectPalette(HPALETTE hPalette, BOOL bForceBackground)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1377 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1378 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1379
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1380 return ::SelectPalette(m_hDC, hPalette, bForceBackground);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1381 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1382
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1383 UINT RealizePalette()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1384 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1385 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1386 return ::RealizePalette(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1387 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1388
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1389 void UpdateColors()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1390 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1391 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1392 ::UpdateColors(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1393 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1394
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1395 // Drawing-Attribute Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1396 COLORREF GetBkColor() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1397 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1398 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1399 return ::GetBkColor(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1400 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1401
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1402 int GetBkMode() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1403 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1404 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1405 return ::GetBkMode(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1406 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1407
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1408 int GetPolyFillMode() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1409 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1410 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1411 return ::GetPolyFillMode(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1412 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1413
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1414 int GetROP2() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1415 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1416 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1417 return ::GetROP2(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1418 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1419
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1420 int GetStretchBltMode() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1421 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1422 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1423 return ::GetStretchBltMode(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1424 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1425
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1426 COLORREF GetTextColor() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1427 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1428 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1429 return ::GetTextColor(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1430 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1431
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1432 COLORREF SetBkColor(COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1433 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1434 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1435 return ::SetBkColor(m_hDC, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1436 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1437
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1438 int SetBkMode(int nBkMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1439 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1440 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1441 return ::SetBkMode(m_hDC, nBkMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1442 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1443
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1444 int SetPolyFillMode(int nPolyFillMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1445 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1446 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1447 return ::SetPolyFillMode(m_hDC, nPolyFillMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1448 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1449
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1450 int SetROP2(int nDrawMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1451 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1452 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1453 return ::SetROP2(m_hDC, nDrawMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1454 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1455
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1456 int SetStretchBltMode(int nStretchMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1457 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1458 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1459 return ::SetStretchBltMode(m_hDC, nStretchMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1460 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1461
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1462 COLORREF SetTextColor(COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1463 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1464 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1465 return ::SetTextColor(m_hDC, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1466 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1467
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1468 BOOL GetColorAdjustment(LPCOLORADJUSTMENT lpColorAdjust) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1469 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1470 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1471 return ::GetColorAdjustment(m_hDC, lpColorAdjust);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1472 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1473
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1474 BOOL SetColorAdjustment(const COLORADJUSTMENT* lpColorAdjust)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1475 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1476 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1477 return ::SetColorAdjustment(m_hDC, lpColorAdjust);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1478 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1479
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1480 // Mapping Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1481 int GetMapMode() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1482 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1483 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1484 return ::GetMapMode(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1485 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1486
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1487 BOOL GetViewportOrg(LPPOINT lpPoint) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1488 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1489 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1490 return ::GetViewportOrgEx(m_hDC, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1491 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1492
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1493 int SetMapMode(int nMapMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1494 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1495 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1496 return ::SetMapMode(m_hDC, nMapMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1497 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1498
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1499 // Viewport Origin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1500 BOOL SetViewportOrg(int x, int y, LPPOINT lpPoint = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1501 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1502 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1503 return ::SetViewportOrgEx(m_hDC, x, y, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1504 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1505
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1506 BOOL SetViewportOrg(POINT point, LPPOINT lpPointRet = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1507 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1508 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1509 return SetViewportOrg(point.x, point.y, lpPointRet);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1510 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1511
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1512 BOOL OffsetViewportOrg(int nWidth, int nHeight, LPPOINT lpPoint = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1513 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1514 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1515 return ::OffsetViewportOrgEx(m_hDC, nWidth, nHeight, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1516 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1517
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1518 // Viewport Extent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1519 BOOL GetViewportExt(LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1520 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1521 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1522 return ::GetViewportExtEx(m_hDC, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1523 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1524
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1525 BOOL SetViewportExt(int x, int y, LPSIZE lpSize = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1526 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1527 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1528 return ::SetViewportExtEx(m_hDC, x, y, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1529 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1530
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1531 BOOL SetViewportExt(SIZE size, LPSIZE lpSizeRet = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1532 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1533 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1534 return SetViewportExt(size.cx, size.cy, lpSizeRet);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1535 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1536
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1537 BOOL ScaleViewportExt(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1538 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1539 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1540 return ::ScaleViewportExtEx(m_hDC, xNum, xDenom, yNum, yDenom, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1541 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1542
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1543 // Window Origin
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1544 BOOL GetWindowOrg(LPPOINT lpPoint) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1545 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1546 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1547 return ::GetWindowOrgEx(m_hDC, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1548 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1549
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1550 BOOL SetWindowOrg(int x, int y, LPPOINT lpPoint = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1551 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1552 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1553 return ::SetWindowOrgEx(m_hDC, x, y, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1554 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1555
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1556 BOOL SetWindowOrg(POINT point, LPPOINT lpPointRet = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1557 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1558 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1559 return SetWindowOrg(point.x, point.y, lpPointRet);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1560 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1561
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1562 BOOL OffsetWindowOrg(int nWidth, int nHeight, LPPOINT lpPoint = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1563 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1564 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1565 return ::OffsetWindowOrgEx(m_hDC, nWidth, nHeight, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1566 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1567
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1568 // Window extent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1569 BOOL GetWindowExt(LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1570 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1571 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1572 return ::GetWindowExtEx(m_hDC, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1573 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1574
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1575 BOOL SetWindowExt(int x, int y, LPSIZE lpSize = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1576 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1577 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1578 return ::SetWindowExtEx(m_hDC, x, y, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1579 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1580
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1581 BOOL SetWindowExt(SIZE size, LPSIZE lpSizeRet = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1582 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1583 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1584 return SetWindowExt(size.cx, size.cy, lpSizeRet);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1585 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1586
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1587 BOOL ScaleWindowExt(int xNum, int xDenom, int yNum, int yDenom, LPSIZE lpSize = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1588 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1589 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1590 return ::ScaleWindowExtEx(m_hDC, xNum, xDenom, yNum, yDenom, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1591 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1592
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1593 // Coordinate Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1594 BOOL DPtoLP(LPPOINT lpPoints, int nCount = 1) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1595 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1596 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1597 return ::DPtoLP(m_hDC, lpPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1598 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1599
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1600 BOOL DPtoLP(LPRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1601 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1602 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1603 return ::DPtoLP(m_hDC, (LPPOINT)lpRect, 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1604 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1605
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1606 BOOL DPtoLP(LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1607 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1608 SIZE sizeWinExt = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1609 if(!GetWindowExt(&sizeWinExt))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1610 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1611 SIZE sizeVpExt = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1612 if(!GetViewportExt(&sizeVpExt))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1613 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1614 lpSize->cx = ::MulDiv(lpSize->cx, abs(sizeWinExt.cx), abs(sizeVpExt.cx));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1615 lpSize->cy = ::MulDiv(lpSize->cy, abs(sizeWinExt.cy), abs(sizeVpExt.cy));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1616 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1617 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1618
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1619 BOOL LPtoDP(LPPOINT lpPoints, int nCount = 1) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1620 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1621 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1622 return ::LPtoDP(m_hDC, lpPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1623 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1624
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1625 BOOL LPtoDP(LPRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1626 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1627 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1628 return ::LPtoDP(m_hDC, (LPPOINT)lpRect, 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1629 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1630
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1631 BOOL LPtoDP(LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1632 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1633 SIZE sizeWinExt = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1634 if(!GetWindowExt(&sizeWinExt))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1635 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1636 SIZE sizeVpExt = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1637 if(!GetViewportExt(&sizeVpExt))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1638 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1639 lpSize->cx = ::MulDiv(lpSize->cx, abs(sizeVpExt.cx), abs(sizeWinExt.cx));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1640 lpSize->cy = ::MulDiv(lpSize->cy, abs(sizeVpExt.cy), abs(sizeWinExt.cy));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1641 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1642 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1643
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1644 // Special Coordinate Functions (useful for dealing with metafiles and OLE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1645 #define HIMETRIC_INCH 2540 // HIMETRIC units per inch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1646
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1647 void DPtoHIMETRIC(LPSIZE lpSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1648 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1649 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1650 int nMapMode = GetMapMode();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1651 if((nMapMode < MM_ISOTROPIC) && (nMapMode != MM_TEXT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1652 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1653 // when using a constrained map mode, map against physical inch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1654 SetMapMode(MM_HIMETRIC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1655 DPtoLP(lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1656 SetMapMode(nMapMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1657 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1658 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1659 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1660 // map against logical inch for non-constrained mapping modes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1661 int cxPerInch = GetDeviceCaps(LOGPIXELSX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1662 int cyPerInch = GetDeviceCaps(LOGPIXELSY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1663 ATLASSERT((cxPerInch != 0) && (cyPerInch != 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1664 lpSize->cx = ::MulDiv(lpSize->cx, HIMETRIC_INCH, cxPerInch);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1665 lpSize->cy = ::MulDiv(lpSize->cy, HIMETRIC_INCH, cyPerInch);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1666 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1667 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1668
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1669 void HIMETRICtoDP(LPSIZE lpSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1670 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1671 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1672 int nMapMode = GetMapMode();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1673 if((nMapMode < MM_ISOTROPIC) && (nMapMode != MM_TEXT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1674 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1675 // when using a constrained map mode, map against physical inch
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1676 SetMapMode(MM_HIMETRIC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1677 LPtoDP(lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1678 SetMapMode(nMapMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1679 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1680 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1681 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1682 // map against logical inch for non-constrained mapping modes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1683 int cxPerInch = GetDeviceCaps(LOGPIXELSX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1684 int cyPerInch = GetDeviceCaps(LOGPIXELSY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1685 ATLASSERT((cxPerInch != 0) && (cyPerInch != 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1686 lpSize->cx = ::MulDiv(lpSize->cx, cxPerInch, HIMETRIC_INCH);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1687 lpSize->cy = ::MulDiv(lpSize->cy, cyPerInch, HIMETRIC_INCH);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1688 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1689 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1690
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1691 void LPtoHIMETRIC(LPSIZE lpSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1692 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1693 LPtoDP(lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1694 DPtoHIMETRIC(lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1695 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1696
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1697 void HIMETRICtoLP(LPSIZE lpSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1698 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1699 HIMETRICtoDP(lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1700 DPtoLP(lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1701 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1702
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1703 // Region Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1704 BOOL FillRgn(HRGN hRgn, HBRUSH hBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1705 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1706 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1707 return ::FillRgn(m_hDC, hRgn, hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1708 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1709
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1710 BOOL FrameRgn(HRGN hRgn, HBRUSH hBrush, int nWidth, int nHeight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1711 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1712 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1713 return ::FrameRgn(m_hDC, hRgn, hBrush, nWidth, nHeight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1714 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1715
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1716 BOOL InvertRgn(HRGN hRgn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1717 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1718 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1719 return ::InvertRgn(m_hDC, hRgn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1720 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1721
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1722 BOOL PaintRgn(HRGN hRgn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1723 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1724 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1725 return ::PaintRgn(m_hDC, hRgn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1726 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1727
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1728 // Clipping Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1729 int GetClipBox(LPRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1730 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1731 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1732 return ::GetClipBox(m_hDC, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1733 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1734
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1735 int GetClipRgn(CRgn& region) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1736 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1737 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1738 if(region.IsNull())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1739 region.CreateRectRgn(0, 0, 0, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1740
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1741 int nRet = ::GetClipRgn(m_hDC, region);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1742 if(nRet != 1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1743 region.DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1744
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1745 return nRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1746 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1747
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1748 BOOL PtVisible(int x, int y) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1749 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1750 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1751 return ::PtVisible(m_hDC, x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1752 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1753
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1754 BOOL PtVisible(POINT point) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1755 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1756 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1757 return ::PtVisible(m_hDC, point.x, point.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1758 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1759
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1760 BOOL RectVisible(LPCRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1761 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1762 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1763 return ::RectVisible(m_hDC, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1764 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1765
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1766 int SelectClipRgn(HRGN hRgn)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1767 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1768 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1769 return ::SelectClipRgn(m_hDC, (HRGN)hRgn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1770 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1771
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1772 int ExcludeClipRect(int x1, int y1, int x2, int y2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1773 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1774 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1775 return ::ExcludeClipRect(m_hDC, x1, y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1776 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1777
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1778 int ExcludeClipRect(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1779 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1780 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1781 return ::ExcludeClipRect(m_hDC, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1782 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1783
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1784 int ExcludeUpdateRgn(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1785 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1786 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1787 return ::ExcludeUpdateRgn(m_hDC, hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1788 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1789
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1790 int IntersectClipRect(int x1, int y1, int x2, int y2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1791 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1792 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1793 return ::IntersectClipRect(m_hDC, x1, y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1794 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1795
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1796 int IntersectClipRect(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1797 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1798 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1799 return ::IntersectClipRect(m_hDC, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1800 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1801
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1802 int OffsetClipRgn(int x, int y)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1803 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1804 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1805 return ::OffsetClipRgn(m_hDC, x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1806 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1807
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1808 int OffsetClipRgn(SIZE size)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1809 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1810 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1811 return ::OffsetClipRgn(m_hDC, size.cx, size.cy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1812 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1813
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1814 int SelectClipRgn(HRGN hRgn, int nMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1815 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1816 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1817 return ::ExtSelectClipRgn(m_hDC, hRgn, nMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1818 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1819
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1820 // Line-Output Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1821 BOOL GetCurrentPosition(LPPOINT lpPoint) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1822 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1823 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1824 return ::GetCurrentPositionEx(m_hDC, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1825 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1826
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1827 BOOL MoveTo(int x, int y, LPPOINT lpPoint = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1828 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1829 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1830 return ::MoveToEx(m_hDC, x, y, lpPoint);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1831 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1832
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1833 BOOL MoveTo(POINT point, LPPOINT lpPointRet = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1834 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1835 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1836 return MoveTo(point.x, point.y, lpPointRet);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1837 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1838
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1839 BOOL LineTo(int x, int y)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1840 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1841 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1842 return ::LineTo(m_hDC, x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1843 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1844
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1845 BOOL LineTo(POINT point)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1846 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1847 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1848 return LineTo(point.x, point.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1849 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1850
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1851 BOOL Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1852 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1853 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1854 return ::Arc(m_hDC, x1, y1, x2, y2, x3, y3, x4, y4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1855 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1856
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1857 BOOL Arc(LPCRECT lpRect, POINT ptStart, POINT ptEnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1858 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1859 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1860 return ::Arc(m_hDC, lpRect->left, lpRect->top,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1861 lpRect->right, lpRect->bottom, ptStart.x, ptStart.y,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1862 ptEnd.x, ptEnd.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1863 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1864
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1865 BOOL Polyline(const POINT* lpPoints, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1866 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1867 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1868 return ::Polyline(m_hDC, lpPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1869 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1870
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1871 BOOL AngleArc(int x, int y, int nRadius, float fStartAngle, float fSweepAngle)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1872 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1873 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1874 return ::AngleArc(m_hDC, x, y, nRadius, fStartAngle, fSweepAngle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1875 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1876
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1877 BOOL ArcTo(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1878 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1879 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1880 return ::ArcTo(m_hDC, x1, y1, x2, y2, x3, y3, x4, y4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1881 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1882
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1883 BOOL ArcTo(LPCRECT lpRect, POINT ptStart, POINT ptEnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1884 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1885 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1886 return ArcTo(lpRect->left, lpRect->top, lpRect->right,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1887 lpRect->bottom, ptStart.x, ptStart.y, ptEnd.x, ptEnd.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1888 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1889
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1890 int GetArcDirection() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1891 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1892 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1893 return ::GetArcDirection(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1894 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1895
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1896 int SetArcDirection(int nArcDirection)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1897 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1898 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1899 return ::SetArcDirection(m_hDC, nArcDirection);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1900 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1901
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1902 BOOL PolyDraw(const POINT* lpPoints, const BYTE* lpTypes, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1903 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1904 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1905 return ::PolyDraw(m_hDC, lpPoints, lpTypes, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1906 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1907
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1908 BOOL PolylineTo(const POINT* lpPoints, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1909 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1910 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1911 return ::PolylineTo(m_hDC, lpPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1912 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1913
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1914 BOOL PolyPolyline(const POINT* lpPoints,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1915 const DWORD* lpPolyPoints, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1916 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1917 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1918 return ::PolyPolyline(m_hDC, lpPoints, lpPolyPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1919 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1920
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1921 BOOL PolyBezier(const POINT* lpPoints, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1922 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1923 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1924 return ::PolyBezier(m_hDC, lpPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1925 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1926
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1927 BOOL PolyBezierTo(const POINT* lpPoints, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1928 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1929 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1930 return ::PolyBezierTo(m_hDC, lpPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1931 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1932
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1933 // Simple Drawing Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1934 BOOL FillRect(LPCRECT lpRect, HBRUSH hBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1935 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1936 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1937 return ::FillRect(m_hDC, lpRect, hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1938 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1939
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1940 BOOL FillRect(LPCRECT lpRect, int nColorIndex)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1941 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1942 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1943 return ::FillRect(m_hDC, lpRect, (HBRUSH)LongToPtr(nColorIndex + 1));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1944 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1945
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1946 BOOL FrameRect(LPCRECT lpRect, HBRUSH hBrush)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1947 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1948 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1949 return ::FrameRect(m_hDC, lpRect, hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1950 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1951
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1952 BOOL InvertRect(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1953 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1954 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1955 return ::InvertRect(m_hDC, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1956 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1957
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1958 BOOL DrawIcon(int x, int y, HICON hIcon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1959 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1960 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1961 return ::DrawIcon(m_hDC, x, y, hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1962 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1963
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1964 BOOL DrawIcon(POINT point, HICON hIcon)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1965 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1966 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1967 return ::DrawIcon(m_hDC, point.x, point.y, hIcon);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1968 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1969
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1970 BOOL DrawIconEx(int x, int y, HICON hIcon, int cxWidth, int cyWidth, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1971 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1972 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1973 return ::DrawIconEx(m_hDC, x, y, hIcon, cxWidth, cyWidth, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1974 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1975
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1976 BOOL DrawIconEx(POINT point, HICON hIcon, SIZE size, UINT uStepIfAniCur = 0, HBRUSH hbrFlickerFreeDraw = NULL, UINT uFlags = DI_NORMAL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1977 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1978 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1979 return ::DrawIconEx(m_hDC, point.x, point.y, hIcon, size.cx, size.cy, uStepIfAniCur, hbrFlickerFreeDraw, uFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1980 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1981
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1982 BOOL DrawState(POINT pt, SIZE size, HBITMAP hBitmap, UINT nFlags, HBRUSH hBrush = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1983 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1984 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1985 return ::DrawState(m_hDC, hBrush, NULL, (LPARAM)hBitmap, 0, pt.x, pt.y, size.cx, size.cy, nFlags | DST_BITMAP);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1986 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1987
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1988 BOOL DrawState(POINT pt, SIZE size, HICON hIcon, UINT nFlags, HBRUSH hBrush = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1989 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1990 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1991 return ::DrawState(m_hDC, hBrush, NULL, (LPARAM)hIcon, 0, pt.x, pt.y, size.cx, size.cy, nFlags | DST_ICON);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1992 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1993
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1994 BOOL DrawState(POINT pt, SIZE size, LPCTSTR lpszText, UINT nFlags, BOOL bPrefixText = TRUE, int nTextLen = 0, HBRUSH hBrush = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1995 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1996 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1997 return ::DrawState(m_hDC, hBrush, NULL, (LPARAM)lpszText, (WPARAM)nTextLen, pt.x, pt.y, size.cx, size.cy, nFlags | (bPrefixText ? DST_PREFIXTEXT : DST_TEXT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1998 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1999
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2000 BOOL DrawState(POINT pt, SIZE size, DRAWSTATEPROC lpDrawProc, LPARAM lData, UINT nFlags, HBRUSH hBrush = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2001 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2002 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2003 return ::DrawState(m_hDC, hBrush, lpDrawProc, lData, 0, pt.x, pt.y, size.cx, size.cy, nFlags | DST_COMPLEX);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2004 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2005
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2006 // Ellipse and Polygon Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2007 BOOL Chord(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2008 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2009 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2010 return ::Chord(m_hDC, x1, y1, x2, y2, x3, y3, x4, y4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2011 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2012
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2013 BOOL Chord(LPCRECT lpRect, POINT ptStart, POINT ptEnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2014 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2015 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2016 return ::Chord(m_hDC, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, ptStart.x, ptStart.y, ptEnd.x, ptEnd.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2017 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2018
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2019 void DrawFocusRect(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2020 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2021 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2022 ::DrawFocusRect(m_hDC, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2023 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2024
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2025 BOOL Ellipse(int x1, int y1, int x2, int y2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2026 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2027 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2028 return ::Ellipse(m_hDC, x1, y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2029 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2030
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2031 BOOL Ellipse(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2032 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2033 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2034 return ::Ellipse(m_hDC, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2035 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2036
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2037 BOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2038 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2039 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2040 return ::Pie(m_hDC, x1, y1, x2, y2, x3, y3, x4, y4);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2041 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2042
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2043 BOOL Pie(LPCRECT lpRect, POINT ptStart, POINT ptEnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2044 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2045 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2046 return ::Pie(m_hDC, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, ptStart.x, ptStart.y, ptEnd.x, ptEnd.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2047 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2048
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2049 BOOL Polygon(const POINT* lpPoints, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2050 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2051 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2052 return ::Polygon(m_hDC, lpPoints, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2053 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2054
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2055 BOOL PolyPolygon(const POINT* lpPoints, const INT* lpPolyCounts, int nCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2056 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2057 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2058 return ::PolyPolygon(m_hDC, lpPoints, lpPolyCounts, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2059 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2060
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2061 BOOL Rectangle(int x1, int y1, int x2, int y2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2062 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2063 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2064 return ::Rectangle(m_hDC, x1, y1, x2, y2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2065 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2066
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2067 BOOL Rectangle(LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2068 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2069 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2070 return ::Rectangle(m_hDC, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2071 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2072
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2073 BOOL RoundRect(int x1, int y1, int x2, int y2, int x3, int y3)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2074 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2075 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2076 return ::RoundRect(m_hDC, x1, y1, x2, y2, x3, y3);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2077 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2078
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2079 BOOL RoundRect(LPCRECT lpRect, POINT point)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2080 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2081 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2082 return ::RoundRect(m_hDC, lpRect->left, lpRect->top, lpRect->right, lpRect->bottom, point.x, point.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2083 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2084
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2085 // Bitmap Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2086 BOOL PatBlt(int x, int y, int nWidth, int nHeight, DWORD dwRop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2087 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2088 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2089 return ::PatBlt(m_hDC, x, y, nWidth, nHeight, dwRop);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2090 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2091
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2092 BOOL BitBlt(int x, int y, int nWidth, int nHeight, HDC hSrcDC,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2093 int xSrc, int ySrc, DWORD dwRop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2094 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2095 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2096 return ::BitBlt(m_hDC, x, y, nWidth, nHeight, hSrcDC, xSrc, ySrc, dwRop);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2097 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2098
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2099 BOOL StretchBlt(int x, int y, int nWidth, int nHeight, HDC hSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2100 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2101 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2102 return ::StretchBlt(m_hDC, x, y, nWidth, nHeight, hSrcDC, xSrc, ySrc, nSrcWidth, nSrcHeight, dwRop);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2103 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2104
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2105 COLORREF GetPixel(int x, int y) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2106 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2107 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2108 return ::GetPixel(m_hDC, x, y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2109 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2110
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2111 COLORREF GetPixel(POINT point) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2112 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2113 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2114 return ::GetPixel(m_hDC, point.x, point.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2115 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2116
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2117 COLORREF SetPixel(int x, int y, COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2118 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2119 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2120 return ::SetPixel(m_hDC, x, y, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2121 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2122
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2123 COLORREF SetPixel(POINT point, COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2124 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2125 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2126 return ::SetPixel(m_hDC, point.x, point.y, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2127 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2129 BOOL FloodFill(int x, int y, COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2130 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2131 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2132 return ::FloodFill(m_hDC, x, y, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2133 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2134
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2135 BOOL ExtFloodFill(int x, int y, COLORREF crColor, UINT nFillType)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2136 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2137 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2138 return ::ExtFloodFill(m_hDC, x, y, crColor, nFillType);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2139 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2141 BOOL MaskBlt(int x, int y, int nWidth, int nHeight, HDC hSrcDC, int xSrc, int ySrc, HBITMAP hMaskBitmap, int xMask, int yMask, DWORD dwRop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2142 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2143 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2144 return ::MaskBlt(m_hDC, x, y, nWidth, nHeight, hSrcDC, xSrc, ySrc, hMaskBitmap, xMask, yMask, dwRop);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2145 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2146
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2147 BOOL PlgBlt(LPPOINT lpPoint, HDC hSrcDC, int xSrc, int ySrc, int nWidth, int nHeight, HBITMAP hMaskBitmap, int xMask, int yMask)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2148 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2149 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2150 return ::PlgBlt(m_hDC, lpPoint, hSrcDC, xSrc, ySrc, nWidth, nHeight, hMaskBitmap, xMask, yMask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2151 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2152
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2153 BOOL SetPixelV(int x, int y, COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2154 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2155 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2156 return ::SetPixelV(m_hDC, x, y, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2157 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2158
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2159 BOOL SetPixelV(POINT point, COLORREF crColor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2160 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2161 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2162 return ::SetPixelV(m_hDC, point.x, point.y, crColor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2163 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2164
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2165 BOOL TransparentBlt(int x, int y, int nWidth, int nHeight, HDC hSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, UINT crTransparent)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2166 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2167 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2168 return ::TransparentBlt(m_hDC, x, y, nWidth, nHeight, hSrcDC, xSrc, ySrc, nSrcWidth, nSrcHeight, crTransparent);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2169 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2170
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2171 BOOL GradientFill(const PTRIVERTEX pVertices, DWORD nVertices, void* pMeshElements, DWORD nMeshElements, DWORD dwMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2172 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2173 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2174 return ::GradientFill(m_hDC, pVertices, nVertices, pMeshElements, nMeshElements, dwMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2175 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2176
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2177 BOOL GradientFillRect(RECT& rect, COLORREF clr1, COLORREF clr2, bool bHorizontal)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2178 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2179 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2181 TRIVERTEX arrTvx[2] = { { 0 }, { 0 } };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2182
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2183 arrTvx[0].x = rect.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2184 arrTvx[0].y = rect.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2185 arrTvx[0].Red = MAKEWORD(0, GetRValue(clr1));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2186 arrTvx[0].Green = MAKEWORD(0, GetGValue(clr1));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2187 arrTvx[0].Blue = MAKEWORD(0, GetBValue(clr1));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2188 arrTvx[0].Alpha = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2189
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2190 arrTvx[1].x = rect.right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2191 arrTvx[1].y = rect.bottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2192 arrTvx[1].Red = MAKEWORD(0, GetRValue(clr2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2193 arrTvx[1].Green = MAKEWORD(0, GetGValue(clr2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2194 arrTvx[1].Blue = MAKEWORD(0, GetBValue(clr2));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2195 arrTvx[1].Alpha = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2196
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2197 GRADIENT_RECT gr = { 0, 1 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2198
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2199 return ::GradientFill(m_hDC, arrTvx, 2, &gr, 1, bHorizontal ? GRADIENT_FILL_RECT_H : GRADIENT_FILL_RECT_V);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2200 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2202 BOOL AlphaBlend(int x, int y, int nWidth, int nHeight, HDC hSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, BLENDFUNCTION bf)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2203 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2204 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2205 return ::AlphaBlend(m_hDC, x, y, nWidth, nHeight, hSrcDC, xSrc, ySrc, nSrcWidth, nSrcHeight, bf);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2208 // Extra bitmap functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2209 // Helper function for painting a disabled toolbar or menu bitmap
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2210 // This function can take either an HBITMAP (for SS) or a DC with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2211 // the bitmap already painted (for cmdbar)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2212 BOOL DitherBlt(int x, int y, int nWidth, int nHeight, HDC hSrcDC, HBITMAP hBitmap, int xSrc, int ySrc,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2213 HBRUSH hBrushBackground = ::GetSysColorBrush(COLOR_3DFACE),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2214 HBRUSH hBrush3DEffect = ::GetSysColorBrush(COLOR_3DHILIGHT),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2215 HBRUSH hBrushDisabledImage = ::GetSysColorBrush(COLOR_3DSHADOW))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2216 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2217 ATLASSERT((m_hDC != NULL) || (hBitmap != NULL));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2218 ATLASSERT((nWidth > 0) && (nHeight > 0));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2219
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2220 // Create a generic DC for all BitBlts
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2221 CDCT<false> dc = (hSrcDC != NULL) ? hSrcDC : ::CreateCompatibleDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2222 ATLASSERT(dc.m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2223 if(dc.m_hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2224 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2225
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2226 // Create a DC for the monochrome DIB section
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2227 CDCT<true> dcBW = ::CreateCompatibleDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2228 ATLASSERT(dcBW.m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2229 if(dcBW.m_hDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2230 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2231 if(hSrcDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2232 dc.DeleteDC();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2233 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2234 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2235
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2236 // Create the monochrome DIB section with a black and white palette
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2237 struct RGBBWBITMAPINFO
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2238 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2239 BITMAPINFOHEADER bmiHeader;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2240 RGBQUAD bmiColors[2];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2241 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2242
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2243 RGBBWBITMAPINFO rgbBWBitmapInfo =
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2244 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2245 { sizeof(BITMAPINFOHEADER), nWidth, nHeight, 1, 1, BI_RGB, 0, 0, 0, 0, 0 },
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2246 { { 0x00, 0x00, 0x00, 0x00 }, { 0xFF, 0xFF, 0xFF, 0x00 } }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2247 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2248
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2249 VOID* pbitsBW;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2250 CBitmap bmpBW = ::CreateDIBSection(dcBW, (LPBITMAPINFO)&rgbBWBitmapInfo, DIB_RGB_COLORS, &pbitsBW, NULL, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2251 ATLASSERT(bmpBW.m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2252 if(bmpBW.m_hBitmap == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2253 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2254 if(hSrcDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2255 dc.DeleteDC();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2256 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2257 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2258
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2259 // Attach the monochrome DIB section and the bitmap to the DCs
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2260 HBITMAP hbmOldBW = dcBW.SelectBitmap(bmpBW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2261 HBITMAP hbmOldDC = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2262 if(hBitmap != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2263 hbmOldDC = dc.SelectBitmap(hBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2264
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2265 // Block: Dark gray removal: we want (128, 128, 128) pixels to become black and not white
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2266 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2267 CDCT<true> dcTemp1 = ::CreateCompatibleDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2268 CDCT<true> dcTemp2 = ::CreateCompatibleDC(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2269 CBitmap bmpTemp1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2270 bmpTemp1.CreateCompatibleBitmap(dc, nWidth, nHeight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2271 CBitmap bmpTemp2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2272 bmpTemp2.CreateBitmap(nWidth, nHeight, 1, 1, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2273 HBITMAP hOldBmp1 = dcTemp1.SelectBitmap(bmpTemp1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2274 HBITMAP hOldBmp2 = dcTemp2.SelectBitmap(bmpTemp2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2275 // Let's copy our image, it will be altered
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2276 dcTemp1.BitBlt(0, 0, nWidth, nHeight, dc, xSrc, ySrc, SRCCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2277
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2278 // All dark gray pixels will become white, the others black
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2279 dcTemp1.SetBkColor(RGB(128, 128, 128));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2280 dcTemp2.BitBlt(0, 0, nWidth, nHeight, dcTemp1, 0, 0, SRCCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2281 // Do an XOR to set to black these white pixels
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2282 dcTemp1.BitBlt(0, 0, nWidth, nHeight, dcTemp2, 0, 0, SRCINVERT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2283
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2284 // BitBlt the bitmap into the monochrome DIB section
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2285 // The DIB section will do a true monochrome conversion
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2286 // The magenta background being closer to white will become white
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2287 dcBW.BitBlt(0, 0, nWidth, nHeight, dcTemp1, 0, 0, SRCCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2288
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2289 // Cleanup
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2290 dcTemp1.SelectBitmap(hOldBmp1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2291 dcTemp2.SelectBitmap(hOldBmp2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2292 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2293
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2294 // Paint the destination rectangle using hBrushBackground
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2295 if(hBrushBackground != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2296 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2297 RECT rc = { x, y, x + nWidth, y + nHeight };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2298 FillRect(&rc, hBrushBackground);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2299 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2300
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2301 // BitBlt the black bits in the monochrome bitmap into hBrush3DEffect color in the destination DC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2302 // The magic ROP comes from the Charles Petzold's book
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2303 HBRUSH hOldBrush = SelectBrush(hBrush3DEffect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2304 BitBlt(x + 1, y + 1, nWidth, nHeight, dcBW, 0, 0, 0xB8074A);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2305
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2306 // BitBlt the black bits in the monochrome bitmap into hBrushDisabledImage color in the destination DC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2307 SelectBrush(hBrushDisabledImage);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2308 BitBlt(x, y, nWidth, nHeight, dcBW, 0, 0, 0xB8074A);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2309
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2310 SelectBrush(hOldBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2311 dcBW.SelectBitmap(hbmOldBW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2312 dc.SelectBitmap(hbmOldDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2313
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2314 if(hSrcDC == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2315 dc.DeleteDC();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2316
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2317 return TRUE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2318 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2319
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2320 // Text Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2321 BOOL TextOut(int x, int y, LPCTSTR lpszString, int nCount = -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2322 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2323 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2324 if(nCount == -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2325 nCount = lstrlen(lpszString);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2326 return ::TextOut(m_hDC, x, y, lpszString, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2327 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2328
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2329 BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lpRect, LPCTSTR lpszString, int nCount = -1, LPINT lpDxWidths = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2330 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2331 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2332 if(nCount == -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2333 nCount = lstrlen(lpszString);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2334 ATLASSERT((nCount >= 0) && (nCount <= 8192));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2335 return ::ExtTextOut(m_hDC, x, y, nOptions, lpRect, lpszString, (UINT)nCount, lpDxWidths);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2336 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2337
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2338 SIZE TabbedTextOut(int x, int y, LPCTSTR lpszString, int nCount = -1, int nTabPositions = 0, LPINT lpnTabStopPositions = NULL, int nTabOrigin = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2339 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2340 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2341 if(nCount == -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2342 nCount = lstrlen(lpszString);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2343 LONG lRes = ::TabbedTextOut(m_hDC, x, y, lpszString, nCount, nTabPositions, lpnTabStopPositions, nTabOrigin);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2344 SIZE size = { GET_X_LPARAM(lRes), GET_Y_LPARAM(lRes) };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2345 return size;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2346 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2347
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2348 int DrawText(LPCTSTR lpstrText, int cchText, LPRECT lpRect, UINT uFormat)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2349 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2350 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2351 ATLASSERT((uFormat & DT_MODIFYSTRING) == 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2352 return ::DrawText(m_hDC, lpstrText, cchText, lpRect, uFormat);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2353 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2354
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2355 int DrawText(LPTSTR lpstrText, int cchText, LPRECT lpRect, UINT uFormat)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2356 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2357 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2358 return ::DrawText(m_hDC, lpstrText, cchText, lpRect, uFormat);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2359 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2360
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2361 int DrawTextEx(LPTSTR lpstrText, int cchText, LPRECT lpRect, UINT uFormat, LPDRAWTEXTPARAMS lpDTParams = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2362 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2363 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2364 return ::DrawTextEx(m_hDC, lpstrText, cchText, lpRect, uFormat, lpDTParams);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2365 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2366
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2367 // Note - ::DrawShadowText() is present only if comctl32.dll version 6 is loaded
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2368 int DrawShadowText(LPCWSTR lpstrText, int cchText, LPRECT lpRect, DWORD dwFlags, COLORREF clrText, COLORREF clrShadow, int xOffset, int yOffset)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2369 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2370 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2371 ATLASSERT(lpRect != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2372 return ::DrawShadowText(m_hDC, lpstrText, cchText, lpRect, dwFlags, clrText, clrShadow, xOffset, yOffset);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2373 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2374
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2375 BOOL GetTextExtent(LPCTSTR lpszString, int nCount, LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2376 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2377 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2378 if(nCount == -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2379 nCount = lstrlen(lpszString);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2380 return ::GetTextExtentPoint32(m_hDC, lpszString, nCount, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2381 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2382
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2383 BOOL GetTextExtentExPoint(LPCTSTR lpszString, int cchString, LPSIZE lpSize, int nMaxExtent, LPINT lpnFit = NULL, LPINT alpDx = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2384 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2385 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2386 return ::GetTextExtentExPoint(m_hDC, lpszString, cchString, nMaxExtent, lpnFit, alpDx, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2387 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2388
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2389 DWORD GetTabbedTextExtent(LPCTSTR lpszString, int nCount = -1, int nTabPositions = 0, LPINT lpnTabStopPositions = NULL) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2390 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2391 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2392 if(nCount == -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2393 nCount = lstrlen(lpszString);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2394 return ::GetTabbedTextExtent(m_hDC, lpszString, nCount, nTabPositions, lpnTabStopPositions);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2395 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2396
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2397 BOOL GrayString(HBRUSH hBrush, BOOL (CALLBACK* lpfnOutput)(HDC, LPARAM, int), LPARAM lpData, int nCount, int x, int y, int nWidth, int nHeight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2398 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2399 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2400 return ::GrayString(m_hDC, hBrush, (GRAYSTRINGPROC)lpfnOutput, lpData, nCount, x, y, nWidth, nHeight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2401 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2402
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2403 UINT GetTextAlign() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2404 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2405 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2406 return ::GetTextAlign(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2407 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2408
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2409 UINT SetTextAlign(UINT nFlags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2410 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2411 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2412 return ::SetTextAlign(m_hDC, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2413 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2414
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2415 int GetTextFace(LPTSTR lpszFacename, int nCount) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2416 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2417 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2418 return ::GetTextFace(m_hDC, nCount, lpszFacename);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2419 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2420
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2421 int GetTextFaceLen() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2422 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2423 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2424 return ::GetTextFace(m_hDC, 0, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2425 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2426
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2427 #ifdef _OLEAUTO_H_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2428 BOOL GetTextFace(BSTR& bstrFace) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2429 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2430 USES_CONVERSION;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2431 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2432 ATLASSERT(bstrFace == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2433
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2434 int nLen = GetTextFaceLen();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2435 if(nLen == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2436 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2437
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2438 ATL::CTempBuffer<TCHAR, _WTL_STACK_ALLOC_THRESHOLD> buff;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2439 LPTSTR lpszText = buff.Allocate(nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2440 if(lpszText == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2441 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2442
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2443 if(!GetTextFace(lpszText, nLen))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2444 return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2445
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2446 bstrFace = ::SysAllocString(T2OLE(lpszText));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2447 return (bstrFace != NULL) ? TRUE : FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2448 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2449 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2450
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2451 #ifdef __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2452 int GetTextFace(ATL::CString& strFace) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2453 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2454 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2455
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2456 int nLen = GetTextFaceLen();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2457 if(nLen == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2458 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2459
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2460 LPTSTR lpstr = strFace.GetBufferSetLength(nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2461 if(lpstr == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2462 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2463 int nRet = GetTextFace(lpstr, nLen);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2464 strFace.ReleaseBuffer();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2465 return nRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2466 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2467 #endif // __ATLSTR_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2468
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2469 BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2470 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2471 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2472 return ::GetTextMetrics(m_hDC, lpMetrics);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2473 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2474
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2475 int SetTextJustification(int nBreakExtra, int nBreakCount)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2476 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2477 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2478 return ::SetTextJustification(m_hDC, nBreakExtra, nBreakCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2479 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2480
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2481 int GetTextCharacterExtra() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2482 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2483 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2484 return ::GetTextCharacterExtra(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2485 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2486
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2487 int SetTextCharacterExtra(int nCharExtra)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2488 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2489 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2490 return ::SetTextCharacterExtra(m_hDC, nCharExtra);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2491 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2492
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2493 // Advanced Drawing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2494 BOOL DrawEdge(LPRECT lpRect, UINT nEdge, UINT nFlags)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2495 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2496 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2497 return ::DrawEdge(m_hDC, lpRect, nEdge, nFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2498 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2499
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2500 BOOL DrawFrameControl(LPRECT lpRect, UINT nType, UINT nState)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2501 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2502 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2503 return ::DrawFrameControl(m_hDC, lpRect, nType, nState);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2504 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2505
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2506 // Scrolling Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2507 BOOL ScrollDC(int dx, int dy, LPCRECT lpRectScroll, LPCRECT lpRectClip, HRGN hRgnUpdate, LPRECT lpRectUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2508 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2509 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2510 return ::ScrollDC(m_hDC, dx, dy, lpRectScroll, lpRectClip, hRgnUpdate, lpRectUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2511 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2512
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2513 // Font Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2514 BOOL GetCharWidth(UINT nFirstChar, UINT nLastChar, LPINT lpBuffer) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2515 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2516 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2517 return ::GetCharWidth(m_hDC, nFirstChar, nLastChar, lpBuffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2518 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2519
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2520 // GetCharWidth32 is not supported under Win9x
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2521 BOOL GetCharWidth32(UINT nFirstChar, UINT nLastChar, LPINT lpBuffer) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2522 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2523 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2524 return ::GetCharWidth32(m_hDC, nFirstChar, nLastChar, lpBuffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2525 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2526
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2527 DWORD SetMapperFlags(DWORD dwFlag)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2528 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2529 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2530 return ::SetMapperFlags(m_hDC, dwFlag);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2531 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2532
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2533 BOOL GetAspectRatioFilter(LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2534 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2535 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2536 return ::GetAspectRatioFilterEx(m_hDC, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2537 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2538
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2539 BOOL GetCharABCWidths(UINT nFirstChar, UINT nLastChar, LPABC lpabc) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2540 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2541 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2542 return ::GetCharABCWidths(m_hDC, nFirstChar, nLastChar, lpabc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2543 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2544
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2545 DWORD GetFontData(DWORD dwTable, DWORD dwOffset, LPVOID lpData, DWORD cbData) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2546 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2547 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2548 return ::GetFontData(m_hDC, dwTable, dwOffset, lpData, cbData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2549 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2550
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2551 int GetKerningPairs(int nPairs, LPKERNINGPAIR lpkrnpair) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2552 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2553 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2554 return ::GetKerningPairs(m_hDC, nPairs, lpkrnpair);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2555 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2556
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2557 UINT GetOutlineTextMetrics(UINT cbData, LPOUTLINETEXTMETRIC lpotm) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2558 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2559 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2560 return ::GetOutlineTextMetrics(m_hDC, cbData, lpotm);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2561 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2562
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2563 DWORD GetGlyphOutline(UINT nChar, UINT nFormat, LPGLYPHMETRICS lpgm, DWORD cbBuffer, LPVOID lpBuffer, const MAT2* lpmat2) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2564 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2565 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2566 return ::GetGlyphOutline(m_hDC, nChar, nFormat, lpgm, cbBuffer, lpBuffer, lpmat2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2567 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2568
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2569 BOOL GetCharABCWidths(UINT nFirstChar, UINT nLastChar, LPABCFLOAT lpABCF) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2570 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2571 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2572 return ::GetCharABCWidthsFloat(m_hDC, nFirstChar, nLastChar, lpABCF);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2573 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2574
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2575 BOOL GetCharWidth(UINT nFirstChar, UINT nLastChar, float* lpFloatBuffer) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2576 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2577 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2578 return ::GetCharWidthFloat(m_hDC, nFirstChar, nLastChar, lpFloatBuffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2579 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2580
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2581 // Printer/Device Escape Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2582 int Escape(int nEscape, int nCount, LPCSTR lpszInData, LPVOID lpOutData)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2583 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2584 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2585 return ::Escape(m_hDC, nEscape, nCount, lpszInData, lpOutData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2586 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2587
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2588 int Escape(int nEscape, int nInputSize, LPCSTR lpszInputData,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2589 int nOutputSize, LPSTR lpszOutputData)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2590 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2591 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2592 return ::ExtEscape(m_hDC, nEscape, nInputSize, lpszInputData, nOutputSize, lpszOutputData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2593 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2594
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2595 int DrawEscape(int nEscape, int nInputSize, LPCSTR lpszInputData)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2596 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2597 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2598 return ::DrawEscape(m_hDC, nEscape, nInputSize, lpszInputData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2599 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2600
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2601 // Escape helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2602 int StartDoc(LPCTSTR lpszDocName) // old Win3.0 version
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2603 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2604 DOCINFO di = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2605 di.cbSize = sizeof(DOCINFO);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2606 di.lpszDocName = lpszDocName;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2607 return StartDoc(&di);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2608 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2609
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2610 int StartDoc(LPDOCINFO lpDocInfo)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2611 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2612 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2613 return ::StartDoc(m_hDC, lpDocInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2614 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2615
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2616 int StartPage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2617 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2618 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2619 return ::StartPage(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2620 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2621
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2622 int EndPage()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2623 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2624 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2625 return ::EndPage(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2626 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2627
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2628 int SetAbortProc(BOOL (CALLBACK* lpfn)(HDC, int))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2629 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2630 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2631 return ::SetAbortProc(m_hDC, (ABORTPROC)lpfn);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2632 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2633
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2634 int AbortDoc()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2635 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2636 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2637 return ::AbortDoc(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2638 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2639
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2640 int EndDoc()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2641 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2642 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2643 return ::EndDoc(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2644 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2645
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2646 // MetaFile Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2647 BOOL PlayMetaFile(HMETAFILE hMF)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2648 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2649 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2650 if(::GetDeviceCaps(m_hDC, TECHNOLOGY) == DT_METAFILE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2651 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2652 // playing metafile in metafile, just use core windows API
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2653 return ::PlayMetaFile(m_hDC, hMF);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2654 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2655
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2656 // for special playback, lParam == pDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2657 return ::EnumMetaFile(m_hDC, hMF, EnumMetaFileProc, (LPARAM)this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2658 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2659
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2660 BOOL PlayMetaFile(HENHMETAFILE hEnhMetaFile, LPCRECT lpBounds)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2661 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2662 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2663 return ::PlayEnhMetaFile(m_hDC, hEnhMetaFile, lpBounds);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2664 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2665
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2666 BOOL AddMetaFileComment(UINT nDataSize, const BYTE* pCommentData) // can be used for enhanced metafiles only
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2667 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2668 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2669 return ::GdiComment(m_hDC, nDataSize, pCommentData);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2670 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2671
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2672 // Special handling for metafile playback
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2673 static int CALLBACK EnumMetaFileProc(HDC hDC, HANDLETABLE* pHandleTable, METARECORD* pMetaRec, int nHandles, LPARAM lParam)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2674 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2675 CDCT<false>* pDC = (CDCT<false>*)lParam;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2676
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2677 switch (pMetaRec->rdFunction)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2678 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2679 case META_SETMAPMODE:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2680 pDC->SetMapMode((int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2681 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2682 case META_SETWINDOWEXT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2683 pDC->SetWindowExt((int)(short)pMetaRec->rdParm[1], (int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2684 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2685 case META_SETWINDOWORG:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2686 pDC->SetWindowOrg((int)(short)pMetaRec->rdParm[1], (int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2687 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2688 case META_SETVIEWPORTEXT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2689 pDC->SetViewportExt((int)(short)pMetaRec->rdParm[1], (int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2690 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2691 case META_SETVIEWPORTORG:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2692 pDC->SetViewportOrg((int)(short)pMetaRec->rdParm[1], (int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2693 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2694 case META_SCALEWINDOWEXT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2695 pDC->ScaleWindowExt((int)(short)pMetaRec->rdParm[3], (int)(short)pMetaRec->rdParm[2],
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2696 (int)(short)pMetaRec->rdParm[1], (int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2697 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2698 case META_SCALEVIEWPORTEXT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2699 pDC->ScaleViewportExt((int)(short)pMetaRec->rdParm[3], (int)(short)pMetaRec->rdParm[2],
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2700 (int)(short)pMetaRec->rdParm[1], (int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2701 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2702 case META_OFFSETVIEWPORTORG:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2703 pDC->OffsetViewportOrg((int)(short)pMetaRec->rdParm[1], (int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2704 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2705 case META_SAVEDC:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2706 pDC->SaveDC();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2707 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2708 case META_RESTOREDC:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2709 pDC->RestoreDC((int)(short)pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2710 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2711 case META_SETBKCOLOR:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2712 pDC->SetBkColor(*(UNALIGNED COLORREF*)&pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2713 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2714 case META_SETTEXTCOLOR:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2715 pDC->SetTextColor(*(UNALIGNED COLORREF*)&pMetaRec->rdParm[0]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2716 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2717
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2718 // need to watch out for SelectObject(HFONT), for custom font mapping
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2719 case META_SELECTOBJECT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2720 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2721 HGDIOBJ hObject = pHandleTable->objectHandle[pMetaRec->rdParm[0]];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2722 UINT nObjType = ::GetObjectType(hObject);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2723 if(nObjType == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2724 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2725 // object type is unknown, determine if it is a font
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2726 HFONT hStockFont = (HFONT)::GetStockObject(SYSTEM_FONT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2727 HFONT hFontOld = (HFONT)::SelectObject(pDC->m_hDC, hStockFont);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2728 HGDIOBJ hObjOld = ::SelectObject(pDC->m_hDC, hObject);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2729 if(hObjOld == hStockFont)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2730 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2731 // got the stock object back, so must be selecting a font
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2732 pDC->SelectFont((HFONT)hObject);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2733 break; // don't play the default record
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2734 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2735 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2736 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2737 // didn't get the stock object back, so restore everything
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2738 ::SelectObject(pDC->m_hDC, hFontOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2739 ::SelectObject(pDC->m_hDC, hObjOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2740 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2741 // and fall through to PlayMetaFileRecord...
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2742 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2743 else if(nObjType == OBJ_FONT)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2744 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2745 // play back as CDCHandle::SelectFont(HFONT)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2746 pDC->SelectFont((HFONT)hObject);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2747 break; // don't play the default record
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2748 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2749 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2750 // fall through...
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2751
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2752 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2753 ::PlayMetaFileRecord(hDC, pHandleTable, pMetaRec, nHandles);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2754 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2755 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2756
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2757 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2758 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2759
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2760 // Path Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2761 BOOL AbortPath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2762 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2763 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2764 return ::AbortPath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2765 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2766
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2767 BOOL BeginPath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2768 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2769 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2770 return ::BeginPath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2771 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2772
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2773 BOOL CloseFigure()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2774 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2775 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2776 return ::CloseFigure(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2777 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2778
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2779 BOOL EndPath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2780 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2781 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2782 return ::EndPath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2783 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2784
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2785 BOOL FillPath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2786 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2787 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2788 return ::FillPath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2789 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2790
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2791 BOOL FlattenPath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2792 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2793 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2794 return ::FlattenPath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2795 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2796
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2797 BOOL StrokeAndFillPath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2798 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2799 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2800 return ::StrokeAndFillPath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2801 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2802
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2803 BOOL StrokePath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2804 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2805 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2806 return ::StrokePath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2807 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2808
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2809 BOOL WidenPath()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2810 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2811 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2812 return ::WidenPath(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2813 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2814
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2815 BOOL GetMiterLimit(PFLOAT pfMiterLimit) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2816 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2817 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2818 return ::GetMiterLimit(m_hDC, pfMiterLimit);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2819 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2820
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2821 BOOL SetMiterLimit(float fMiterLimit)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2822 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2823 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2824 return ::SetMiterLimit(m_hDC, fMiterLimit, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2825 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2826
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2827 int GetPath(LPPOINT lpPoints, LPBYTE lpTypes, int nCount) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2828 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2829 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2830 return ::GetPath(m_hDC, lpPoints, lpTypes, nCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2831 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2832
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2833 BOOL SelectClipPath(int nMode)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2834 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2835 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2836 return ::SelectClipPath(m_hDC, nMode);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2837 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2838
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2839 // Misc Helper Functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2840 static CBrushHandle PASCAL GetHalftoneBrush()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2841 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2842 HBRUSH halftoneBrush = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2843 WORD grayPattern[8] = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2844 for(int i = 0; i < 8; i++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2845 grayPattern[i] = (WORD)(0x5555 << (i & 1));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2846 HBITMAP grayBitmap = CreateBitmap(8, 8, 1, 1, &grayPattern);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2847 if(grayBitmap != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2848 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2849 halftoneBrush = ::CreatePatternBrush(grayBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2850 DeleteObject(grayBitmap);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2851 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2852 return CBrushHandle(halftoneBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2853 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2854
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2855 void DrawDragRect(LPCRECT lpRect, SIZE size, LPCRECT lpRectLast, SIZE sizeLast, HBRUSH hBrush = NULL, HBRUSH hBrushLast = NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2856 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2857 // first, determine the update region and select it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2858 CRgn rgnOutside;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2859 rgnOutside.CreateRectRgnIndirect(lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2860 RECT rect = *lpRect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2861 ::InflateRect(&rect, -size.cx, -size.cy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2862 ::IntersectRect(&rect, &rect, lpRect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2863 CRgn rgnInside;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2864 rgnInside.CreateRectRgnIndirect(&rect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2865 CRgn rgnNew;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2866 rgnNew.CreateRectRgn(0, 0, 0, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2867 rgnNew.CombineRgn(rgnOutside, rgnInside, RGN_XOR);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2868
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2869 HBRUSH hBrushOld = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2870 CBrush brushHalftone;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2871 if(hBrush == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2872 brushHalftone = hBrush = CDCHandle::GetHalftoneBrush();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2873 if(hBrushLast == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2874 hBrushLast = hBrush;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2875
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2876 CRgn rgnLast;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2877 CRgn rgnUpdate;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2878 if(lpRectLast != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2879 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2880 // find difference between new region and old region
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2881 rgnLast.CreateRectRgn(0, 0, 0, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2882 rgnOutside.SetRectRgn(lpRectLast->left, lpRectLast->top, lpRectLast->right, lpRectLast->bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2883 rect = *lpRectLast;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2884 ::InflateRect(&rect, -sizeLast.cx, -sizeLast.cy);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2885 ::IntersectRect(&rect, &rect, lpRectLast);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2886 rgnInside.SetRectRgn(rect.left, rect.top, rect.right, rect.bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2887 rgnLast.CombineRgn(rgnOutside, rgnInside, RGN_XOR);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2888
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2889 // only diff them if brushes are the same
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2890 if(hBrush == hBrushLast)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2891 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2892 rgnUpdate.CreateRectRgn(0, 0, 0, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2893 rgnUpdate.CombineRgn(rgnLast, rgnNew, RGN_XOR);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2894 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2895 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2896 if((hBrush != hBrushLast) && (lpRectLast != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2897 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2898 // brushes are different -- erase old region first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2899 SelectClipRgn(rgnLast);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2900 GetClipBox(&rect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2901 hBrushOld = SelectBrush(hBrushLast);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2902 PatBlt(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, PATINVERT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2903 SelectBrush(hBrushOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2904 hBrushOld = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2905 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2906
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2907 // draw into the update/new region
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2908 SelectClipRgn(rgnUpdate.IsNull() ? rgnNew : rgnUpdate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2909 GetClipBox(&rect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2910 hBrushOld = SelectBrush(hBrush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2911 PatBlt(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, PATINVERT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2912
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2913 // cleanup DC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2914 if(hBrushOld != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2915 SelectBrush(hBrushOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2916 SelectClipRgn(NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2917 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2918
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2919 void FillSolidRect(LPCRECT lpRect, COLORREF clr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2920 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2921 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2922
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2923 COLORREF clrOld = ::SetBkColor(m_hDC, clr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2924 ATLASSERT(clrOld != CLR_INVALID);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2925 if(clrOld != CLR_INVALID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2926 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2927 ::ExtTextOut(m_hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2928 ::SetBkColor(m_hDC, clrOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2929 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2930 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2931
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2932 void FillSolidRect(int x, int y, int cx, int cy, COLORREF clr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2933 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2934 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2935
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2936 RECT rect = { x, y, x + cx, y + cy };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2937 FillSolidRect(&rect, clr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2938 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2939
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2940 void Draw3dRect(LPCRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2941 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2942 Draw3dRect(lpRect->left, lpRect->top, lpRect->right - lpRect->left,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2943 lpRect->bottom - lpRect->top, clrTopLeft, clrBottomRight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2944 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2945
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2946 void Draw3dRect(int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2947 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2948 FillSolidRect(x, y, cx - 1, 1, clrTopLeft);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2949 FillSolidRect(x, y, 1, cy - 1, clrTopLeft);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2950 FillSolidRect(x + cx, y, -1, cy, clrBottomRight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2951 FillSolidRect(x, y + cy, cx, -1, clrBottomRight);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2952 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2953
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2954 // DIB support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2955 int SetDIBitsToDevice(int x, int y, DWORD dwWidth, DWORD dwHeight, int xSrc, int ySrc, UINT uStartScan, UINT cScanLines, CONST VOID* lpvBits, CONST BITMAPINFO* lpbmi, UINT uColorUse)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2956 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2957 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2958 return ::SetDIBitsToDevice(m_hDC, x, y, dwWidth, dwHeight, xSrc, ySrc, uStartScan, cScanLines, lpvBits, lpbmi, uColorUse);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2959 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2960
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2961 int StretchDIBits(int x, int y, int nWidth, int nHeight, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, CONST VOID* lpvBits, CONST BITMAPINFO* lpbmi, UINT uColorUse, DWORD dwRop)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2962 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2963 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2964 return ::StretchDIBits(m_hDC, x, y, nWidth, nHeight, xSrc, ySrc, nSrcWidth, nSrcHeight, lpvBits, lpbmi, uColorUse, dwRop);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2965 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2966
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2967 UINT GetDIBColorTable(UINT uStartIndex, UINT cEntries, RGBQUAD* pColors) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2968 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2969 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2970 return ::GetDIBColorTable(m_hDC, uStartIndex, cEntries, pColors);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2971 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2972
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2973 UINT SetDIBColorTable(UINT uStartIndex, UINT cEntries, CONST RGBQUAD* pColors)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2974 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2975 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2976 return ::SetDIBColorTable(m_hDC, uStartIndex, cEntries, pColors);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2977 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2978
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2979 // OpenGL support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2980 #if !defined(_ATL_NO_OPENGL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2981 int ChoosePixelFormat(CONST PIXELFORMATDESCRIPTOR* ppfd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2982 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2983 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2984 return ::ChoosePixelFormat(m_hDC, ppfd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2985 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2986
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2987 int DescribePixelFormat(int iPixelFormat, UINT nBytes, LPPIXELFORMATDESCRIPTOR ppfd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2988 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2989 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2990 return ::DescribePixelFormat(m_hDC, iPixelFormat, nBytes, ppfd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2991 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2992
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2993 int GetPixelFormat() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2994 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2995 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2996 return ::GetPixelFormat(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2997 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2998
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2999 BOOL SetPixelFormat(int iPixelFormat, CONST PIXELFORMATDESCRIPTOR* ppfd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3000 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3001 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3002 return ::SetPixelFormat(m_hDC, iPixelFormat, ppfd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3003 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3004
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3005 BOOL SwapBuffers()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3006 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3007 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3008 return ::SwapBuffers(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3009 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3010
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3011 HGLRC wglCreateContext()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3012 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3013 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3014 return ::wglCreateContext(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3015 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3016
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3017 HGLRC wglCreateLayerContext(int iLayerPlane)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3018 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3019 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3020 return ::wglCreateLayerContext(m_hDC, iLayerPlane);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3021 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3022
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3023 BOOL wglMakeCurrent(HGLRC hglrc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3024 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3025 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3026 return ::wglMakeCurrent(m_hDC, hglrc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3027 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3028
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3029 BOOL wglUseFontBitmaps(DWORD dwFirst, DWORD dwCount, DWORD listBase)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3030 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3031 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3032 return ::wglUseFontBitmaps(m_hDC, dwFirst, dwCount, listBase);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3033 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3034
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3035 BOOL wglUseFontOutlines(DWORD dwFirst, DWORD dwCount, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3036 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3037 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3038 return ::wglUseFontOutlines(m_hDC, dwFirst, dwCount, listBase, deviation, extrusion, format, lpgmf);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3039 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3040
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3041 BOOL wglDescribeLayerPlane(int iPixelFormat, int iLayerPlane, UINT nBytes, LPLAYERPLANEDESCRIPTOR plpd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3042 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3043 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3044 return ::wglDescribeLayerPlane(m_hDC, iPixelFormat, iLayerPlane, nBytes, plpd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3045 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3046
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3047 int wglSetLayerPaletteEntries(int iLayerPlane, int iStart, int cEntries, CONST COLORREF* pclr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3048 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3049 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3050 return ::wglSetLayerPaletteEntries(m_hDC, iLayerPlane, iStart, cEntries, pclr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3051 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3052
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3053 int wglGetLayerPaletteEntries(int iLayerPlane, int iStart, int cEntries, COLORREF* pclr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3054 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3055 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3056 return ::wglGetLayerPaletteEntries(m_hDC, iLayerPlane, iStart, cEntries, pclr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3057 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3058
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3059 BOOL wglRealizeLayerPalette(int iLayerPlane, BOOL bRealize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3060 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3061 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3062 return ::wglRealizeLayerPalette(m_hDC, iLayerPlane, bRealize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3063 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3064
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3065 BOOL wglSwapLayerBuffers(UINT uPlanes)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3066 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3067 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3068 return ::wglSwapLayerBuffers(m_hDC, uPlanes);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3069 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3070 #endif // !defined(_ATL_NO_OPENGL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3071
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3072 COLORREF GetDCPenColor() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3073 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3074 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3075 return ::GetDCPenColor(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3076 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3077
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3078 COLORREF SetDCPenColor(COLORREF clr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3079 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3080 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3081 return ::SetDCPenColor(m_hDC, clr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3082 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3083
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3084 COLORREF GetDCBrushColor() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3085 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3086 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3087 return ::GetDCBrushColor(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3088 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3089
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3090 COLORREF SetDCBrushColor(COLORREF clr)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3091 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3092 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3093 return ::SetDCBrushColor(m_hDC, clr);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3094 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3095
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3096 DWORD GetFontUnicodeRanges(LPGLYPHSET lpgs) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3097 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3098 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3099 return ::GetFontUnicodeRanges(m_hDC, lpgs);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3100 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3102 DWORD GetGlyphIndices(LPCTSTR lpstr, int cch, LPWORD pgi, DWORD dwFlags) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3103 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3104 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3105 return ::GetGlyphIndices(m_hDC, lpstr, cch, pgi, dwFlags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3106 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3107
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3108 BOOL GetTextExtentPointI(LPWORD pgiIn, int cgi, LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3109 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3110 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3111 return ::GetTextExtentPointI(m_hDC, pgiIn, cgi, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3112 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3114 BOOL GetTextExtentExPointI(LPWORD pgiIn, int cgi, int nMaxExtent, LPINT lpnFit, LPINT alpDx, LPSIZE lpSize) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3115 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3116 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3117 return ::GetTextExtentExPointI(m_hDC, pgiIn, cgi, nMaxExtent, lpnFit, alpDx, lpSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3118 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3120 BOOL GetCharWidthI(UINT giFirst, UINT cgi, LPWORD pgi, LPINT lpBuffer) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3121 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3122 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3123 return ::GetCharWidthI(m_hDC, giFirst, cgi, pgi, lpBuffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3124 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3125
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3126 BOOL GetCharABCWidthsI(UINT giFirst, UINT cgi, LPWORD pgi, LPABC lpabc) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3127 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3128 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3129 return ::GetCharABCWidthsI(m_hDC, giFirst, cgi, pgi, lpabc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3130 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3131
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3132 BOOL ColorCorrectPalette(HPALETTE hPalette, DWORD dwFirstEntry, DWORD dwNumOfEntries)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3133 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3134 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3135 return ::ColorCorrectPalette(m_hDC, hPalette, dwFirstEntry, dwNumOfEntries);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3136 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3137 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3139
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3140 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3141 // CDC Helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3142
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3143 class CPaintDC : public CDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3144 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3145 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3146 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3147 HWND m_hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3148 PAINTSTRUCT m_ps;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3149
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3150 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3151 CPaintDC(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3152 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3153 ATLASSERT(::IsWindow(hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3154 m_hWnd = hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3155 m_hDC = ::BeginPaint(hWnd, &m_ps);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3156 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3157
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3158 ~CPaintDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3159 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3160 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3161 ATLASSERT(::IsWindow(m_hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3162 ::EndPaint(m_hWnd, &m_ps);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3163 Detach();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3164 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3165 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3166
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3167 class CClientDC : public CDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3168 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3169 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3170 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3171 HWND m_hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3172
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3173 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3174 CClientDC(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3175 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3176 ATLASSERT((hWnd == NULL) || ::IsWindow(hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3177 m_hWnd = hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3178 m_hDC = ::GetDC(hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3179 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3180
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3181 ~CClientDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3182 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3183 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3184 ::ReleaseDC(m_hWnd, Detach());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3185 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3186 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3187
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3188 class CWindowDC : public CDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3189 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3190 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3191 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3192 HWND m_hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3193
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3194 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3195 CWindowDC(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3196 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3197 ATLASSERT((hWnd == NULL) || ::IsWindow(hWnd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3198 m_hWnd = hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3199 m_hDC = ::GetWindowDC(hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3200 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3202 ~CWindowDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3203 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3204 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3205 ::ReleaseDC(m_hWnd, Detach());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3207 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3208
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3209 class CMemoryDC : public CDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3210 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3211 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3212 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3213 HDC m_hDCOriginal;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3214 RECT m_rcPaint;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3215 CBitmap m_bmp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3216 HBITMAP m_hBmpOld;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3217
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3218 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3219 CMemoryDC(HDC hDC, const RECT& rcPaint) : m_hDCOriginal(hDC), m_hBmpOld(NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3220 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3221 m_rcPaint = rcPaint;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3222 CreateCompatibleDC(m_hDCOriginal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3223 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3224 m_bmp.CreateCompatibleBitmap(m_hDCOriginal, m_rcPaint.right - m_rcPaint.left, m_rcPaint.bottom - m_rcPaint.top);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3225 ATLASSERT(m_bmp.m_hBitmap != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3226 m_hBmpOld = SelectBitmap(m_bmp);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3227 SetViewportOrg(-m_rcPaint.left, -m_rcPaint.top);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3228 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3229
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3230 ~CMemoryDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3231 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3232 ::BitBlt(m_hDCOriginal, m_rcPaint.left, m_rcPaint.top, m_rcPaint.right - m_rcPaint.left, m_rcPaint.bottom - m_rcPaint.top, m_hDC, m_rcPaint.left, m_rcPaint.top, SRCCOPY);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3233 SelectBitmap(m_hBmpOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3234 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3235 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3236
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3237
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3238 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3239 // Enhanced metafile support
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3240
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3241 class CEnhMetaFileInfo
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3242 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3243 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3244 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3245 HENHMETAFILE m_hEMF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3246 BYTE* m_pBits;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3247 TCHAR* m_pDesc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3248 ENHMETAHEADER m_header;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3249 PIXELFORMATDESCRIPTOR m_pfd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3250
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3251 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3252 CEnhMetaFileInfo(HENHMETAFILE hEMF) : m_hEMF(hEMF), m_pBits(NULL), m_pDesc(NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3253 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3254
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3255 ~CEnhMetaFileInfo()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3256 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3257 delete [] m_pBits;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3258 delete [] m_pDesc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3259 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3260
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3261 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3262 BYTE* GetEnhMetaFileBits()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3263 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3264 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3265 UINT nBytes = ::GetEnhMetaFileBits(m_hEMF, 0, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3266 delete [] m_pBits;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3267 m_pBits = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3268 ATLTRY(m_pBits = new BYTE[nBytes]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3269 if (m_pBits != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3270 ::GetEnhMetaFileBits(m_hEMF, nBytes, m_pBits);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3271 return m_pBits;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3272 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3273
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3274 LPTSTR GetEnhMetaFileDescription()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3275 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3276 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3277 UINT nLen = ::GetEnhMetaFileDescription(m_hEMF, 0, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3278 delete [] m_pDesc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3279 m_pDesc = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3280 ATLTRY(m_pDesc = new TCHAR[nLen]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3281 if (m_pDesc != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3282 nLen = ::GetEnhMetaFileDescription(m_hEMF, nLen, m_pDesc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3283 return m_pDesc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3284 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3285
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3286 ENHMETAHEADER* GetEnhMetaFileHeader()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3287 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3288 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3289 memset(&m_header, 0, sizeof(m_header));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3290 m_header.iType = EMR_HEADER;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3291 m_header.nSize = sizeof(ENHMETAHEADER);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3292 UINT n = ::GetEnhMetaFileHeader(m_hEMF, sizeof(ENHMETAHEADER), &m_header);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3293 return (n != 0) ? &m_header : NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3294 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3295
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3296 PIXELFORMATDESCRIPTOR* GetEnhMetaFilePixelFormat()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3297 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3298 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3299 memset(&m_pfd, 0, sizeof(m_pfd));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3300 UINT n = ::GetEnhMetaFilePixelFormat(m_hEMF, sizeof(m_pfd), &m_pfd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3301 return (n != 0) ? &m_pfd : NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3302 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3303 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3304
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3305
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3306 template <bool t_bManaged>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3307 class CEnhMetaFileT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3308 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3309 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3310 // Data members
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3311 HENHMETAFILE m_hEMF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3312
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3313 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3314 CEnhMetaFileT(HENHMETAFILE hEMF = NULL) : m_hEMF(hEMF)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3315 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3316 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3317
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3318 ~CEnhMetaFileT()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3319 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3320 if(t_bManaged && (m_hEMF != NULL))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3321 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3322 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3323
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3324 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3325 CEnhMetaFileT<t_bManaged>& operator =(HENHMETAFILE hEMF)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3326 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3327 Attach(hEMF);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3328 return *this;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3329 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3330
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3331 void Attach(HENHMETAFILE hEMF)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3332 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3333 if(t_bManaged && (m_hEMF != NULL) && (m_hEMF != hEMF))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3334 DeleteObject();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3335 m_hEMF = hEMF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3336 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3337
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3338 HENHMETAFILE Detach()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3339 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3340 HENHMETAFILE hEMF = m_hEMF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3341 m_hEMF = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3342 return hEMF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3343 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3344
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3345 operator HENHMETAFILE() const { return m_hEMF; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3346
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3347 bool IsNull() const { return (m_hEMF == NULL); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3348
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3349 BOOL DeleteObject()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3350 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3351 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3352 BOOL bRet = ::DeleteEnhMetaFile(m_hEMF);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3353 m_hEMF = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3354 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3355 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3356
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3357 UINT GetEnhMetaFileBits(UINT cbBuffer, LPBYTE lpbBuffer) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3358 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3359 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3360 return ::GetEnhMetaFileBits(m_hEMF, cbBuffer, lpbBuffer);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3361 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3362
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3363 UINT GetEnhMetaFileDescription(UINT cchBuffer, LPTSTR lpszDescription) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3364 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3365 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3366 return ::GetEnhMetaFileDescription(m_hEMF, cchBuffer, lpszDescription);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3367 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3368
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3369 UINT GetEnhMetaFileHeader(LPENHMETAHEADER lpemh) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3370 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3371 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3372 lpemh->iType = EMR_HEADER;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3373 lpemh->nSize = sizeof(ENHMETAHEADER);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3374 return ::GetEnhMetaFileHeader(m_hEMF, sizeof(ENHMETAHEADER), lpemh);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3375 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3376
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3377 UINT GetEnhMetaFilePaletteEntries(UINT cEntries, LPPALETTEENTRY lppe) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3378 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3379 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3380 return ::GetEnhMetaFilePaletteEntries(m_hEMF, cEntries, lppe);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3381 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3382
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3383 UINT GetEnhMetaFilePixelFormat(DWORD cbBuffer, PIXELFORMATDESCRIPTOR* ppfd) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3384 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3385 ATLASSERT(m_hEMF != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3386 return ::GetEnhMetaFilePixelFormat(m_hEMF, cbBuffer, ppfd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3387 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3388 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3389
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3390 typedef CEnhMetaFileT<false> CEnhMetaFileHandle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3391 typedef CEnhMetaFileT<true> CEnhMetaFile;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3392
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3393
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3394 class CEnhMetaFileDC : public CDC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3395 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3396 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3397 // Constructor/destructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3398 CEnhMetaFileDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3399 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3400 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3401
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3402 CEnhMetaFileDC(HDC hdc, LPCRECT lpRect)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3403 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3404 Create(hdc, NULL, lpRect, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3405 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3406 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3407
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3408 CEnhMetaFileDC(HDC hdcRef, LPCTSTR lpFilename, LPCRECT lpRect, LPCTSTR lpDescription)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3409 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3410 Create(hdcRef, lpFilename, lpRect, lpDescription);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3411 ATLASSERT(m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3412 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3413
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3414 ~CEnhMetaFileDC()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3415 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3416 HENHMETAFILE hEMF = Close();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3417 if (hEMF != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3418 ::DeleteEnhMetaFile(hEMF);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3419 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3420
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3421 // Operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3422 void Create(HDC hdcRef, LPCTSTR lpFilename, LPCRECT lpRect, LPCTSTR lpDescription)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3423 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3424 ATLASSERT(m_hDC == NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3425 m_hDC = ::CreateEnhMetaFile(hdcRef, lpFilename, lpRect, lpDescription);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3426 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3427
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3428 HENHMETAFILE Close()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3429 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3430 HENHMETAFILE hEMF = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3431 if (m_hDC != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3432 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3433 hEMF = ::CloseEnhMetaFile(m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3434 m_hDC = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3435 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3436 return hEMF;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3437 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3438 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3439
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3440 } // namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3441
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3442 #endif // __ATLGDI_H__