CClientDC画出图形,如何计算图形面积?dc都包含那些函数?
class CDC : public CObject
{
DECLARE_DYNCREATE(CDC)
public:
// Attributes
HDC m_hDC; // The output DC (must be first data member)
HDC m_hAttribDC; // The Attribute DC
operator HDC() const;
HDC GetSafeHdc() const; // Always returns the Output DC
CWnd* GetWindow() const;
static CDC* PASCAL FromHandle(HDC hDC);
static void PASCAL DeleteTempMap();
BOOL Attach(HDC hDC); // Attach/Detach affects only the Output DC
HDC Detach();
virtual void SetAttribDC(HDC hDC); // Set the Attribute DC
virtual void SetOutputDC(HDC hDC); // Set the Output DC
virtual void ReleaseAttribDC(); // Release the Attribute DC
virtual void ReleaseOutputDC(); // Release the Output DC
BOOL IsPrinting() const; // TRUE if being used for printing
CPen* GetCurrentPen() const;
CBrush* GetCurrentBrush() const;
CPalette* GetCurrentPalette() const;
CFont* GetCurrentFont() const;
CBitmap* GetCurrentBitmap() const;
// for bidi and mirrored localization
DWORD GetLayout() const;
DWORD SetLayout(DWORD dwLayout);
// Constructors
CDC();
BOOL CreateDC(LPCTSTR lpszDriverName, LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput, const void* lpInitData);
BOOL CreateIC(LPCTSTR lpszDriverName, LPCTSTR lpszDeviceName,
LPCTSTR lpszOutput, const void* lpInitData);
BOOL CreateCompatibleDC(CDC* pDC);
BOOL DeleteDC();
// Device-Context Functions
virtual int SaveDC();
virtual BOOL RestoreDC(int nSavedDC);
int GetDeviceCaps(int nIndex) const;
UINT SetBoundsRect(LPCRECT lpRectBounds, UINT flags);
UINT GetBoundsRect(LPRECT lpRectBounds, UINT flags);
BOOL ResetDC(const DEVMODE* lpDevMode);
// Drawing-Tool Functions
CPoint GetBrushOrg() const;
CPoint SetBrushOrg(int x, int y);
CPoint SetBrushOrg(POINT point);
int EnumObjects(int nObjectType,
int (CALLBACK* lpfn)(LPVOID, LPARAM), LPARAM lpData);
// Type-safe selection helpers
public:
virtual CGdiObject* SelectStockObject(int nIndex);
CPen* SelectObject(CPen* pPen);
CBrush* SelectObject(CBrush* pBrush);
virtual CFont* SelectObject(CFont* pFont);
CBitmap* SelectObject(CBitmap* pBitmap);
int SelectObject(CRgn* pRgn); // special return for regions
CGdiObject* SelectObject(CGdiObject* pObject);
// CGdiObject* provided so compiler doesn't use SelectObject(HGDIOBJ)
// Color and Color Palette Functions
COLORREF GetNearestColor(COLORREF crColor) const;
CPalette* SelectPalette(CPalette* pPalette, BOOL bForceBackground);
UINT RealizePalette();
void UpdateColors();
// Drawing-Attribute Functions
COLORREF GetBkColor() const;
int GetBkMode() const;
int GetPolyFillMode() const;
int GetROP2() const;
int GetStretchBltMode() const;
COLORREF GetTextColor() const;
virtual COLORREF SetBkColor(COLORREF crColor);
int SetBkMode(int nBkMode);
int SetPolyFillMode(int nPolyFillMode);
int SetROP2(int nDrawMode);
int SetStretchBltMode(int nStretchMode);
virtual COLORREF SetTextColor(COLORREF crColor);
BOOL GetColorAdjustment(LPCOLORADJUSTMENT lpColorAdjust) const;
BOOL SetColorAdjustment(const COLORADJUSTMENT* lpColorAdjust);
#if (_WIN32_WINNT >= 0x0500)
COLORREF GetDCBrushColor() const;
COLORREF SetDCBrushColor(COLORREF crColor);
COLORREF GetDCPenColor() const;
COLORREF SetDCPenColor(COLORREF crColor);
#endif
// Graphics mode
int SetGraphicsMode(int iMode);
int GetGraphicsMode() const;
// World transform
BOOL SetWorldTransform(const XFORM* pXform);
BOOL ModifyWorldTransform(const XFORM* pXform,DWORD iMode);
BOOL GetWorldTransform(XFORM* pXform) const;
// Mapping Functions
int GetMapMode() const;
CPoint GetViewportOrg() const;
virtual int SetMapMode(int nMapMode);
// Viewport Origin
virtual CPoint SetViewportOrg(int x, int y);
CPoint SetViewportOrg(POINT point);
virtual CPoint OffsetViewportOrg(int nWidth, int nHeight);
// Viewport Extent
CSize GetViewportExt() const;
virtual CSize SetViewportExt(int cx, int cy);
CSize SetViewportExt(SIZE size);
virtual CSize ScaleViewportExt(int xNum, int xDenom, int yNum, int yDenom);
// Window Origin
CPoint GetWindowOrg() const;
CPoint SetWindowOrg(int x, int y);
CPoint SetWindowOrg(POINT point);
CPoint OffsetWindowOrg(int nWidth, int nHeight);
// Window extent
CSize GetWindowExt() const;
virtual CSize SetWindowExt(int cx, int cy);
CSize SetWindowExt(SIZE size);
virtual CSize ScaleWindowExt(int xNum, int xDenom, int yNum, int yDenom);
// Coordinate Functions
void DPtoLP(LPPOINT lpPoints, int nCount = 1) const;
void DPtoLP(LPRECT lpRect) const;
void DPtoLP(LPSIZE lpSize) const;
void LPtoDP(LPPOINT lpPoints, int nCount = 1) const;
void LPtoDP(LPRECT lpRect) const;
void LPtoDP(LPSIZE lpSize) const;
// Special Coordinate Functions (useful for dealing with metafiles and OLE)
void DPtoHIMETRIC(LPSIZE lpSize) const;
void LPtoHIMETRIC(LPSIZE lpSize) const;
void HIMETRICtoDP(LPSIZE lpSize) const;
void HIMETRICtoLP(LPSIZE lpSize) const;
// Region Functions
BOOL FillRgn(CRgn* pRgn, CBrush* pBrush);
BOOL FrameRgn(CRgn* pRgn, CBrush* pBrush, int nWidth, int nHeight);
BOOL InvertRgn(CRgn* pRgn);
BOOL PaintRgn(CRgn* pRgn);
// Clipping Functions
virtual int GetClipBox(LPRECT lpRect) const;
virtual BOOL PtVisible(int x, int y) const;
BOOL PtVisible(POINT point) const;
virtual BOOL RectVisible(LPCRECT lpRect) const;
int SelectClipRgn(CRgn* pRgn);
int ExcludeClipRect(int x1, int y1, int x2, int y2);
int ExcludeClipRect(LPCRECT lpRect);
int ExcludeUpdateRgn(CWnd* pWnd);
int IntersectClipRect(int x1, int y1, int x2, int y2);
int IntersectClipRect(LPCRECT lpRect);
int OffsetClipRgn(int x, int y);
int OffsetClipRgn(SIZE size);
int SelectClipRgn(CRgn* pRgn, int nMode);
// Line-Output Functions
CPoint GetCurrentPosition() const;
CPoint MoveTo(int x, int y);
CPoint MoveTo(POINT point);
BOOL LineTo(int x, int y);
BOOL LineTo(POINT point);
BOOL Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
BOOL Arc(LPCRECT lpRect, POINT ptStart, POINT ptEnd);
BOOL Polyline(const POINT* lpPoints, int nCount);
BOOL AngleArc(int x, int y, int nRadius, float fStartAngle, float fSweepAngle);
BOOL ArcTo(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
BOOL ArcTo(LPCRECT lpRect, POINT ptStart, POINT ptEnd);
int GetArcDirection() const;
int SetArcDirection(int nArcDirection);
BOOL PolyDraw(const POINT* lpPoints, const BYTE* lpTypes, int nCount);
BOOL PolylineTo(const POINT* lpPoints, int nCount);
BOOL PolyPolyline(const POINT* lpPoints,
const DWORD* lpPolyPoints, int nCount);
BOOL PolyBezier(const POINT* lpPoints, int nCount);
BOOL PolyBezierTo(const POINT* lpPoints, int nCount);
// Simple Drawing Functions
void FillRect(LPCRECT lpRect, CBrush* pBrush);
void FrameRect(LPCRECT lpRect, CBrush* pBrush);
void InvertRect(LPCRECT lpRect);
BOOL DrawIcon(int x, int y, HICON hIcon);
BOOL DrawIcon(POINT point, HICON hIcon);
BOOL DrawState(CPoint pt, CSize size, HBITMAP hBitmap, UINT nFlags,
HBRUSH hBrush = NULL);
BOOL DrawState(CPoint pt, CSize size, CBitmap* pBitmap, UINT nFlags,
CBrush* pBrush = NULL);
BOOL DrawState(CPoint pt, CSize size, HICON hIcon, UINT nFlags,
HBRUSH hBrush = NULL);
BOOL DrawState(CPoint pt, CSize size, HICON hIcon, UINT nFlags,
CBrush* pBrush = NULL);
BOOL DrawState(CPoint pt, CSize size, LPCTSTR lpszText, UINT nFlags,
BOOL bPrefixText = TRUE, int nTextLen = 0, HBRUSH hBrush = NULL);
BOOL DrawState(CPoint pt, CSize size, LPCTSTR lpszText, UINT nFlags,
BOOL bPrefixText = TRUE, int nTextLen = 0, CBrush* pBrush = NULL);
BOOL DrawState(CPoint pt, CSize size, DRAWSTATEPROC lpDrawProc,
LPARAM lData, UINT nFlags, HBRUSH hBrush = NULL);
BOOL DrawState(CPoint pt, CSize size, DRAWSTATEPROC lpDrawProc,
LPARAM lData, UINT nFlags, CBrush* pBrush = NULL);
// Ellipse and Polygon Functions
BOOL Chord(int x1, int y1, int x2, int y2, int x3, int y3,
int x4, int y4);
BOOL Chord(LPCRECT lpRect, POINT ptStart, POINT ptEnd);
void DrawFocusRect(LPCRECT lpRect);
BOOL Ellipse(int x1, int y1, int x2, int y2);
BOOL Ellipse(LPCRECT lpRect);
BOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
BOOL Pie(LPCRECT lpRect, POINT ptStart, POINT ptEnd);
BOOL Polygon(const POINT* lpPoints, int nCount);
BOOL PolyPolygon(const POINT* lpPoints, const INT* lpPolyCounts, int nCount);
BOOL Rectangle(int x1, int y1, int x2, int y2);
BOOL Rectangle(LPCRECT lpRect);
BOOL RoundRect(int x1, int y1, int x2, int y2, int x3, int y3);
BOOL RoundRect(LPCRECT lpRect, POINT point);
// Bitmap Functions
BOOL PatBlt(int x, int y, int nWidth, int nHeight, DWORD dwRop);
BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
int xSrc, int ySrc, DWORD dwRop);
BOOL StretchBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop);
COLORREF GetPixel(int x, int y) const;
COLORREF GetPixel(POINT point) const;
COLORREF SetPixel(int x, int y, COLORREF crColor);
COLORREF SetPixel(POINT point, COLORREF crColor);
BOOL FloodFill(int x, int y, COLORREF crColor);
BOOL ExtFloodFill(int x, int y, COLORREF crColor, UINT nFillType);
BOOL MaskBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
int xSrc, int ySrc, CBitmap& maskBitmap, int xMask, int yMask,
DWORD dwRop);
BOOL PlgBlt(LPPOINT lpPoint, CDC* pSrcDC, int xSrc, int ySrc,
int nWidth, int nHeight, CBitmap& maskBitmap, int xMask, int yMask);
BOOL SetPixelV(int x, int y, COLORREF crColor);
BOOL SetPixelV(POINT point, COLORREF crColor);
BOOL GradientFill(TRIVERTEX* pVertices, ULONG nVertices,
void* pMesh, ULONG nMeshElements, DWORD dwMode);
BOOL TransparentBlt(int xDest, int yDest, int nDestWidth, int nDestHeight,
CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight,
UINT clrTransparent);
BOOL AlphaBlend(int xDest, int yDest, int nDestWidth, int nDestHeight,
CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight,
BLENDFUNCTION blend);
// Text Functions
virtual BOOL TextOut(int x, int y, LPCTSTR lpszString, int nCount);
BOOL TextOut(int x, int y, const CString& str);
virtual BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lpRect,
LPCTSTR lpszString, UINT nCount, LPINT lpDxWidths);
BOOL ExtTextOut(int x, int y, UINT nOptions, LPCRECT lpRect,
const CString& str, LPINT lpDxWidths);
virtual CSize TabbedTextOut(int x, int y, LPCTSTR lpszString, int nCount,
int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin);
CSize TabbedTextOut(int x, int y, const CString& str,
int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin);
#pragma push_macro("DrawText")
#pragma push_macro("DrawTextEx")
#undef DrawText
#undef DrawTextEx
virtual int _AFX_FUNCNAME(DrawText)(LPCTSTR lpszString, int nCount, LPRECT lpRect,
UINT nFormat);
int _AFX_FUNCNAME(DrawText)(const CString& str, LPRECT lpRect, UINT nFormat);
virtual int _AFX_FUNCNAME(DrawTextEx)(LPTSTR lpszString, int nCount, LPRECT lpRect,
UINT nFormat, LPDRAWTEXTPARAMS lpDTParams);
int _AFX_FUNCNAME(DrawTextEx)(const CString& str, LPRECT lpRect, UINT nFormat, LPDRAWTEXTPARAMS lpDTParams);
int DrawText(LPCTSTR lpszString, int nCount, LPRECT lpRect,
UINT nFormat);
int DrawText(const CString& str, LPRECT lpRect, UINT nFormat);
int DrawTextEx(LPTSTR lpszString, int nCount, LPRECT lpRect,
UINT nFormat, LPDRAWTEXTPARAMS lpDTParams);
int DrawTextEx(const CString& str, LPRECT lpRect, UINT nFormat, LPDRAWTEXTPARAMS lpDTParams);
#pragma pop_macro("DrawText")
#pragma pop_macro("DrawTextEx")
CSize GetTextExtent(LPCTSTR lpszString, int nCount) const;
CSize GetTextExtent(const CString& str) const;
CSize GetOutputTextExtent(LPCTSTR lpszString, int nCount) const;
CSize GetOutputTextExtent(const CString& str) const;
CSize GetTabbedTextExtent(LPCTSTR lpszString, int nCount,
int nTabPositions, LPINT lpnTabStopPositions) const;
CSize GetTabbedTextExtent(const CString& str,
int nTabPositions, LPINT lpnTabStopPositions) const;
CSize GetOutputTabbedTextExtent(LPCTSTR lpszString, int nCount,
int nTabPositions, LPINT lpnTabStopPositions) const;
CSize GetOutputTabbedTextExtent(const CString& str,
int nTabPositions, LPINT lpnTabStopPositions) const;
virtual BOOL GrayString(CBrush* pBrush,
BOOL (CALLBACK* lpfnOutput)(HDC, LPARAM, int), LPARAM lpData,
int nCount, int x, int y, int nWidth, int nHeight);
UINT GetTextAlign() const;
UINT SetTextAlign(UINT nFlags);
int GetTextFace(_In_ int nCount, _Out_z_cap_post_count_(nCount, return) LPTSTR lpszFacename) const;
int GetTextFace(CString& rString) const;
#pragma push_macro("GetTextMetrics")
#undef GetTextMetrics
BOOL _AFX_FUNCNAME(GetTextMetrics)(LPTEXTMETRIC lpMetrics) const;
BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics) const;
#pragma pop_macro("GetTextMetrics")
BOOL GetOutputTextMetrics(LPTEXTMETRIC lpMetrics) const;
int SetTextJustification(int nBreakExtra, int nBreakCount);
int GetTextCharacterExtra() const;
int SetTextCharacterExtra(int nCharExtra);
DWORD GetCharacterPlacement(LPCTSTR lpString, int nCount, int nMaxExtent, LPGCP_RESULTS lpResults, DWORD dwFlags) const;
DWORD GetCharacterPlacement(CString& str, int nMaxExtent, LPGCP_RESULTS lpResults, DWORD dwFlags) const;
#if (_WIN32_WINNT >= 0x0500)
BOOL GetTextExtentExPointI(LPWORD pgiIn, int cgi, int nMaxExtent, LPINT lpnFit, LPINT alpDx, _Out_opt_ LPSIZE lpSize) const;
BOOL GetTextExtentPointI(LPWORD pgiIn, int cgi, _Out_opt_ LPSIZE lpSize) const;
#endif
// Advanced Drawing
BOOL DrawEdge(LPRECT lpRect, UINT nEdge, UINT nFlags);
BOOL DrawFrameControl(LPRECT lpRect, UINT nType, UINT nState);
// Scrolling Functions
BOOL ScrollDC(int dx, int dy, LPCRECT lpRectScroll, LPCRECT lpRectClip,
CRgn* pRgnUpdate, LPRECT lpRectUpdate);
// Font Functions
BOOL GetCharWidth(UINT nFirstChar, UINT nLastChar, LPINT lpBuffer) const;
BOOL GetOutputCharWidth(UINT nFirstChar, UINT nLastChar, LPINT lpBuffer) const;
DWORD SetMapperFlags(DWORD dwFlag);
CSize GetAspectRatioFilter() const;
BOOL GetCharABCWidths(UINT nFirstChar, UINT nLastChar, LPABC lpabc) const;
DWORD GetFontData(DWORD dwTable, DWORD dwOffset, LPVOID lpData, DWORD cbData) const;
int GetKerningPairs(int nPairs, LPKERNINGPAIR lpkrnpair) const;
UINT GetOutlineTextMetrics(UINT cbData, LPOUTLINETEXTMETRIC lpotm) const;
DWORD GetGlyphOutline(UINT nChar, UINT nFormat, LPGLYPHMETRICS lpgm,
DWORD cbBuffer, LPVOID lpBuffer, const MAT2* lpmat2) const;
BOOL GetCharABCWidths(UINT nFirstChar, UINT nLastChar,
LPABCFLOAT lpABCF) const;
BOOL GetCharWidth(UINT nFirstChar, UINT nLastChar,
float* lpFloatBuffer) const;
DWORD GetFontLanguageInfo() const;
#if (_WIN32_WINNT >= 0x0500)
BOOL GetCharABCWidthsI(UINT giFirst, UINT cgi, LPWORD pgi, LPABC lpabc) const;
BOOL GetCharWidthI(UINT giFirst, UINT cgi, LPWORD pgi, LPINT lpBuffer) const;
#endif
// Printer/Device Escape Functions
virtual int Escape(_In_ int nEscape, _In_ int nCount,
_In_bytecount_(nCount) LPCSTR lpszInData, _In_ LPVOID lpOutData);
int Escape(_In_ int nEscape, _In_ int nInputSize, _In_bytecount_(nInputSize) LPCSTR lpszInputData,
_In_ int nOutputSize, _Out_bytecap_(nOutputSize) LPSTR lpszOutputData);
int DrawEscape(int nEscape, int nInputSize, LPCSTR lpszInputData);
// Escape helpers
int StartDoc(LPCTSTR lpszDocName); // old Win3.0 version
int StartDoc(LPDOCINFO lpDocInfo);
int StartPage();
int EndPage();
int SetAbortProc(BOOL (CALLBACK* lpfn)(HDC, int));
int AbortDoc();
int EndDoc();
// MetaFile Functions
BOOL PlayMetaFile(HMETAFILE hMF);
BOOL PlayMetaFile(HENHMETAFILE hEnhMetaFile, LPCRECT lpBounds);
BOOL AddMetaFileComment(UINT nDataSize, const BYTE* pCommentData);
// can be used for enhanced metafiles only
// Path Functions
BOOL AbortPath();
BOOL BeginPath();
BOOL CloseFigure();
BOOL EndPath();
BOOL FillPath();
BOOL FlattenPath();
BOOL StrokeAndFillPath();
BOOL StrokePath();
BOOL WidenPath();
float GetMiterLimit() const;
BOOL SetMiterLimit(float fMiterLimit);
int GetPath(LPPOINT lpPoints, LPBYTE lpTypes, int nCount) const;
BOOL SelectClipPath(int nMode);
// Misc Helper Functions
static CBrush* PASCAL GetHalftoneBrush();
void DrawDragRect(LPCRECT lpRect, SIZE size,
LPCRECT lpRectLast, SIZE sizeLast,
CBrush* pBrush = NULL, CBrush* pBrushLast = NULL);
void FillSolidRect(LPCRECT lpRect, COLORREF clr);
void FillSolidRect(int x, int y, int cx, int cy, COLORREF clr);
void Draw3dRect(LPCRECT lpRect, COLORREF clrTopLeft, COLORREF clrBottomRight);
void Draw3dRect(int x, int y, int cx, int cy,
COLORREF clrTopLeft, COLORREF clrBottomRight);
// Implementation
public:
virtual ~CDC();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// advanced use and implementation
BOOL m_bPrinting;
HGDIOBJ SelectObject(HGDIOBJ); // do not use for regions
protected:
// used for implementation of non-virtual SelectObject calls
static CGdiObject* PASCAL SelectGdiObject(HDC hDC, HGDIOBJ h);
};