📄 gdiobj.h
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// This source code is licensed under Microsoft Shared Source License
// Version 1.0 for Windows CE.
// For a copy of the license visit http://go.microsoft.com/fwlink/?LinkId=3223.
//
/*
*/
/*
@doc BOTH INTERNAL
@module GdiObj.h | Declaration of GDI objects.
*/
#ifndef _GDIOBJ_H_
#define _GDIOBJ_H_
#include <winddi.h>
#include "GdiDefs.h"
#include "DispDrvr.h"
#include "GdiObjBase.hpp"
class ColorTable_t;
class Driver_t;
class MDC;
extern UINT32 v_iProcUser;
extern HPALETTE v_hpalDefault;
extern USHORT g_iUniq;
/*** From winddi.h:
typedef struct _XLATEOBJ
{
ULONG iUniq;
FLONG flXlate;
USHORT iSrcType;
USHORT iDstType;
ULONG cEntries;
ULONG *pulXlate;
} XLATEOBJ;
***/
//
// "Extended" color transformation object
//
// The XLATEOBJ is used to tell the device driver how to do color conversions when Bltting.
// Information about the source and destination COLORTABLEs are cached after the XLATEOBJ
// members, for our use during callbacks.
//
class EXLATEOBJ : public XLATEOBJ
{
public:
ULONG aulXlate[2];
ColorTable_t *m_pcolortblDst;
ColorTable_t *m_pcolortblSrc;
EXLATEOBJ() { pulXlate = NULL; }
~EXLATEOBJ() {}
BOOL
bSetup(
const ColorTable_t* pcolortblDst,
int formatDst,
const ColorTable_t* pcolortblSrc,
int formatSrc
);
BOOL
bSetup(
const DC* pdcDst,
const Brush_t* pBrush
);
BOOL
bSetup(
const DC* pdcDst,
const DC* pdcSrc
);
BOOL
bSetup(
const DC* pdcDst,
const ColorTable_t* pcolortblSrc,
int formatSrc
);
};
/*
@class VBITMAP | Bitmap object (base class)
@access Public Members
@cmember PVOID | m_pvBits || Pointer to bitmap bits.
@cmember DWORD | m_BitmapType || Describes what address space bits live in
@cmember virtual int | GetObject | (int,PVOID) |
Returns information about the bitmap.
@cmember virtual GDIOBJ * | SelectObject | (DC *) | Selects bitmap into DC.
@devnote We do not create objects of this class, only of its derived
classes, MBITMAP and WBITMAP.
*/
// Values for VBITMAP::m_bitsrc
#define BMTYPE_NULL 0 // no bitmap yet
#define BMTYPE_GWE 1 // gwe space (localfree)
#define BMTYPE_CLIENT 2 // client space (remotefree)
#define BMTYPE_RSRC 3 // resource (don't free)
#define BMTYPE_FRAME 4 // framebuffer (don't free)
#define BMTYPE_DRIVER 5 // driver-created
#define BMTYPE_DDRAW 6 // DDraw surface (don't free)
class BitmapBase_t : public GDIOBJ
{
private:
protected:
BitmapBase_t(
GdiObjectHandle_t,
GdiObjectType_t
);
public:
DWORD m_BitmapType; // BMTYPE_xxx values, above
UINT32 m_nBpp;
SURFOBJ* m_pso;
ColorTable_t* m_pcolortbl; // Color table to use with this bitmap
BOOL m_bDIB; // Is this bitmap a dibsect
static
BitmapBase_t*
GET_pVBITMAP(
HGDIOBJ
);
HBITMAP
GetHBITMAP(
void
) const;
inline
int
Width(
void
)
{
return m_pso->sizlBitmap.cx;
}
inline
int
Height(
void
)
{
return m_pso->sizlBitmap.cy;
}
inline
int
Format(
void
)
{
return m_pso->iBitmapFormat;
}
inline
BOOL
bDIBSection(
void
)
{
return m_bDIB;
}
// DibSize returns number of bytes used by this bitmap's image
DWORD
DibSize(
void
);
virtual
int
GetObject(
int,
PVOID
);
virtual
GDIOBJ*
SelectObject(
DC*
);
#if DEBUG
virtual
int
Dump(
void
);
#endif
};
HBITMAP
GdiCopyBitmap(
HBITMAP hbm,
LONG* pnWidth,
LONG* pnHeight
);
/*
@class MBITMAP | Memory Bitmap object
@access Public Members
@cmember void | MBITMAP | () | Constructor.
@cmember void | ~MBITMAP | () | Destructor.
@cmember BOOL | Create | (UINT32 nBitsPP,INT32 nWidth,INT32 nHeight) |
Required initialization function.
@devnote <f CreateDIBSectionStub> initializes this structure manually
instead of calling <mf MBITMAP.Create>.
*/
class MBITMAP : public BitmapBase_t
{
private:
void*
operator new(
size_t
);
MBITMAP(
GdiObjectHandle_t GdiObjectHandle
);
public:
SURFOBJ m_so;
void
operator delete(
void*
);
static
MBITMAP*
New(
void
);
~MBITMAP(
void
);
static
MBITMAP*
GET_pMBITMAP(
HBITMAP hbitmap
);
BOOL
Create(
UINT32 nBitsPP,
INT32 nWidth,
INT32 nHeight,
ColorTable_t* pcolortbl // Get refcounted by MBITMAP
);
BOOL
Create(
UINT32 nBitsPP,
INT32 nWidth,
INT32 nHeight,
Driver_t* pdrv
);
BOOL
Create_AllocSetup(
UINT32 nBitsPP,
INT32 nWidth,
INT32 nHeight
);
};
/*
@class WBITMAP | GDI representation of window
@access Public Members
@cmember RECT | m_rWindow || Position and extent of window.
@cmember HRGN | m_hrgnSysClip || System clipping (visible) region.
@cmember DC * | m_pdcList || List of device contexts.
When the system clipping region is changed,
each of the device contexts that refers to this window
must have its clipping region updated.
@cmember void | WBITMAP | () | Constructor.
@cmember void | ~WBITMAP | () | Destructor.
@cmember void | SetViewport | (CONST RECT *) | Set position and extent.
This should always be followed by <mf WBITMAP.SelectSysClipRgn>.
@cmember BOOL | SelectSysClipRgn | (RGNDAT *) | Set system clipping region.
Updates clipping regions for all device contexts
which refer to this window.
@cmember virtual BOOL | DeleteObject | () | Deletes object.
@cmember virtual GDIOBJ * | SelectObject | (DC *) |
Sets DC pointing to window.
@comm This class does not correspond to any GDI object that is visible
to an application. It is used to represent windows in GDI.
All windows point to the same bits (the frame buffer).
*/
class WBITMAP : public BitmapBase_t
{
private:
void*
operator new(
size_t
);
WBITMAP(
GdiObjectHandle_t GdiObjectHandle,
Driver_t* pdriver
);
public:
static WBITMAP* s_pwbmSelectSysClipRgnLatest;
static HRGN s_hrgnSelectSysClipRgnLatest;
static HRGN s_hrgnNull;
RECT m_rWindow;
HRGN m_hrgnSysClip;
DC* m_pdcList;
static
WBITMAP*
New(
Driver_t*
);
void
operator delete(
void*
);
~WBITMAP(
void
);
void
SetViewport(
const RECT*
);
BOOL
SelectSysClipRgn(
HRGN
);
virtual
BOOL
DeleteObject(
void
);
virtual
GDIOBJ*
SelectObject(
DC*
);
virtual
BOOL
UpdateClipForResizeScreen();
static
void
CheckSysClipRgn(
GdiObjectHandle_t GdiObjectHandle
);
};
class Pen_t : public GDIOBJ
{
private:
void*
operator new(
size_t
);
Pen_t(
GdiObjectHandle_t,
const LOGPEN*
);
public:
LOGPEN m_LogPen;
void
operator delete(
void*
);
static
Pen_t*
New(
const LOGPEN*
);
static
Pen_t*
GET_pPEN(
HPEN hpen
);
HPEN
GetHPEN(
void
) const;
virtual
int
GetObject(
int,
PVOID
);
virtual
GDIOBJ*
SelectObject(
DC*
);
#if DEBUG
virtual
int
Dump(
void
);
#endif
};
BOOL IsCurrentPenWide(HDC);
/*
@class BRUSH | Brush object.
@access Public Members
@cmember LOGBRUSH | m_LogBrush || <t LOGBRUSH> structure.
@cmember PVOID | m_pvAppDib ||
Pointer to application DIB if this is a pattern brush.
@cmember void | BRUSH | () | Constructor.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -