⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gdiobj.h

📁 WinCE5.0部分核心源码
💻 H
📖 第 1 页 / 共 2 页
字号:
//
// 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 + -