📄 rop2.h
字号:
#ifndef _GOS_ROP2_H_
#define _GOS_ROP2_H_
#define R2_IFMODE2MODE(m) ((m&R2_IFMODEMASK)>>R2_IFMODESHIFT)
enum _tagROP
{
R2_ZOOMIN =0x0100L,
R2_ZOOMOUT =0x0200L,
R2_ZOOM =0x0300L,
R2_STRETCH =0x0400L,
R2_ICONLIKE =0x0800L,
R2_LEFT =0x1000L,
R2_RIGHT =0x2000L,
R2_CENTER =0x3000L,
R2_TOP =0x4000L,
R2_BOTTOM =0x8000L,
R2_VCENTER =0xC000L,
R2_IFMODESHIFT =5,
R2_STYLESHIFT =8,
R2_USERSHIFT =16,
R2_ALPHASHIFT =24,
R2_MODEMASK =31L,
R2_IFMODEMASK =7L<<R2_IFMODESHIFT,
R2_STYLEMASK =255<<R2_STYLESHIFT,
R2_USERMASK =255<<R2_USERSHIFT,
R2_ALPHAMASK =255<<R2_ALPHASHIFT,
R2_COPYPEN=0,
R2_PRVRPIFSCR,
R2_PRVRPIFNOTSCR,
R2_PRVRPIFPEN,
R2_PRVRPIFNOTPEN,
R2_XORPEN,
R2_MASKPEN,
R2_MASKNOTPEN,
R2_MASKPENNOT,
R2_MERGEPEN,
R2_MERGENOTPEN,
R2_MERGEPENNOT,
R2_NOTCOPYPEN,
R2_NOTMASKPEN,
R2_NOTMERGEPEN,
R2_NOTXORPEN,
R2_ALPHAPEN,
R2_ALPHABLEND,
R2_ALPHABLENDPEN,
R2_GETCOLORINDEX,
R2_GETCOLOR1,
R2_GETCOLOR4,
R2_GETCOLOR8,
R2_GETCOLOR16,
R2_GETCOLOR24,
R2_SETPENCOLOR,
R2_COPYPALETTE,
R2_NOP,
R2_RPIFSCREEN=R2_PRVRPIFSCR<<R2_IFMODESHIFT,
R2_RPIFNOTSCREEN=R2_PRVRPIFNOTSCR<<R2_IFMODESHIFT,
R2_RPIFPEN=R2_PRVRPIFPEN<<R2_IFMODESHIFT,
R2_RPIFNOTPEN=R2_PRVRPIFNOTPEN<<R2_IFMODESHIFT,
};
class CDC;
class CROP;
class CBitmap;
typedef void (*PFNROP)(CROP& rp);
class CROP
{
public:
void SelectObject(CBitmap* pBitmap);
void SetRopGetColor(CDC* pDestDC,CBitmap* pSrcBmp);
void SetROP(DWORD nRop)
{
ROP=GetProc(nRop);
}
void SetRopAlpahBlend(DWORD nAlpha)
{
a=nAlpha;
SetROP(R2_ALPHABLEND);
}
void SetRopByPenColor(DWORD nRop,COLORREF crRGB)
{
SetROP(R2_SETPENCOLOR);
c=crRGB;ROP(*this);
SetROP(a?R2_ALPHAPEN:nRop);
}
void CopyPalette(PDWORD pDest,const DWORD *pSrc,int nCount)
{
SetROP(R2_COPYPALETTE);
i=DWORD(pDest);a=DWORD(pSrc);c=nCount;ROP(*this);
}
DWORD MoveTo(int x,int y)
{
x*=m_nStepX;y*=m_nStepY;
p=DWORD(m_pBits+x+y);
return p;
}
void MoveTo(DWORD ptr){p=ptr;}
int GetColStep(){return m_nStepX;}
int GetRowStep(){return m_nStepY;}
void StepCol(){p+=m_nStepX;}
void StepRow(){p+=m_nStepY;}
void Offset(int nOffset){p+=DWORD(nOffset);}
void Offset(int dx,int dy){p+=m_nStepX*dx+m_nStepY*dy;}
void OffsetX(int dx){p+=m_nStepX*dx;}
void OffsetY(int dy){p+=m_nStepY*dy;}
DWORD GetPosition(){return p;}
DWORD StepCol(DWORD nAddr){p=nAddr+m_nStepX;return p;}
DWORD StepRow(DWORD nAddr){p=nAddr+m_nStepY;return p;}
public:
static void RpNone(CROP &rp);
static void RpIfPen(CROP &rp);
static void RpIfNotPen(CROP &rp);
static void Color555To565(CROP &rp);
static void Color32To24(CROP &rp);
public:
DWORD p; //绘图点地址(相素位小于8则移位相素位)
DWORD c,a,i;//Color,Alpha,if/palette
DWORD r,g,b;//R G B 分量
int m_nStepX,m_nStepY;//移动一像素步长
PBYTE m_pBits;//位图
PFNROP ROP;
PFNROP (*GetProc)(int nRop);
};
//24位设备的像素ROP
class CROP24 : public CROP
{
public:
static PFNROP GetProc(int nRop);
static void GetColorIndex(CROP &rp);
static void GetColor1(CROP &rp);
static void GetColor4(CROP &rp);
static void GetColor8(CROP &rp);
static void GetColor16(CROP &rp);
static void GetColor24(CROP &rp);
static void RpIfScr(CROP &rp);
static void RpIfNotScr(CROP &rp);
static void SetPenColor(CROP &rp);
static void CopyPalette(CROP &rp);
public:
static void CopyPen(CROP &rp);
static void XorPen(CROP &rp);
static void AndPen(CROP &rp);
static void AndNotPen(CROP &rp);
static void AndPenNot(CROP &rp);
static void OrPen(CROP &rp);
static void OrNotPen(CROP &rp);
static void OrPenNot(CROP &rp);
static void NotCopyPen(CROP &rp);
static void NotAndPen(CROP &rp);
static void NotOrPen(CROP &rp);
static void NotXorPen(CROP &rp);
static void AlphaBlend(CROP &rp);
static void AlphaPen(CROP &rp);
static void AlphaBlendPen(CROP &rp);
};
//16位设备的像素ROP
class CROP16 : public CROP
{
public:
static PFNROP GetProc(int nRop);
static void GetColorIndex(CROP &rp);
static void GetColor1(CROP &rp);
static void GetColor4(CROP &rp);
static void GetColor8(CROP &rp);
static void GetColor16(CROP &rp);
static void GetColor24(CROP &rp);
static void RpIfScr(CROP &rp);
static void RpIfNotScr(CROP &rp);
static void SetPenColor(CROP &rp);
static void CopyPalette(CROP &rp);
public:
static void CopyPen(CROP &rp);
static void XorPen(CROP &rp);
static void AndPen(CROP &rp);
static void AndNotPen(CROP &rp);
static void AndPenNot(CROP &rp);
static void OrPen(CROP &rp);
static void OrNotPen(CROP &rp);
static void OrPenNot(CROP &rp);
static void NotCopyPen(CROP &rp);
static void NotAndPen(CROP &rp);
static void NotOrPen(CROP &rp);
static void NotXorPen(CROP &rp);
static void AlphaBlend(CROP &rp);
static void AlphaPen(CROP &rp);
static void AlphaBlendPen(CROP &rp);
};
//8位设备的像素ROP
class CROP8 : public CROP
{
public:
static PFNROP GetProc(int nRop);
static void GetColorIndex(CROP &rp);
static void GetColor1(CROP &rp);
static void GetColor4(CROP &rp);
static void GetColor8(CROP &rp);
static void GetColor16(CROP &rp);
static void GetColor24(CROP &rp);
static void RpIfScr(CROP &rp);
static void RpIfNotScr(CROP &rp);
static void SetPenColor(CROP &rp);
static void CopyPalette(CROP &rp);
static void AlphaBlendPen(CROP &rp);
public:
static void CopyPen(CROP &rp);
static void XorPen(CROP &rp);
static void AndPen(CROP &rp);
static void AndNotPen(CROP &rp);
static void AndPenNot(CROP &rp);
static void OrPen(CROP &rp);
static void OrNotPen(CROP &rp);
static void OrPenNot(CROP &rp);
static void NotCopyPen(CROP &rp);
static void NotAndPen(CROP &rp);
static void NotOrPen(CROP &rp);
static void NotXorPen(CROP &rp);
static void AlphaBlend(CROP &rp);
static void AlphaPen(CROP &rp);
};
//4位设备的像素ROP
class CROP4 : public CROP
{
public:
static PFNROP GetProc(int nRop);
static void GetColorIndex(CROP &rp);
static void GetColor1(CROP &rp);
static void GetColor4(CROP &rp);
static void GetColor8(CROP &rp);
static void GetColor16(CROP &rp);
static void GetColor24(CROP &rp);
static void RpIfScr(CROP &rp);
static void RpIfNotScr(CROP &rp);
static void SetPenColor(CROP &rp);
static void CopyPalette(CROP &rp);
public:
static void CopyPen(CROP &rp);
static void XorPen(CROP &rp);
static void AndPen(CROP &rp);
static void AndNotPen(CROP &rp);
static void AndPenNot(CROP &rp);
static void OrPen(CROP &rp);
static void OrNotPen(CROP &rp);
static void OrPenNot(CROP &rp);
static void NotCopyPen(CROP &rp);
static void NotAndPen(CROP &rp);
static void NotOrPen(CROP &rp);
static void NotXorPen(CROP &rp);
public:
const static WORD m_aColor16[16];
const static DWORD m_aColor32[16];
};
//1位设备的像素ROP
class CROP1 : public CROP
{
public:
static PFNROP GetProc(int nRop);
static void GetColorIndex(CROP &rp);
static void GetColor1(CROP &rp);
static void GetColor4(CROP &rp);
static void GetColor8(CROP &rp);
static void GetColor16(CROP &rp);
static void GetColor24(CROP &rp);
static void RpIfScr(CROP &rp);
static void RpIfNotScr(CROP &rp);
static void SetPenColor(CROP &rp);
static void CopyPalette(CROP &rp);
public:
static void CopyPen(CROP &rp);
static void XorPen(CROP &rp);
static void AndPen(CROP &rp);
static void AndNotPen(CROP &rp);
static void AndPenNot(CROP &rp);
static void OrPen(CROP &rp);
static void OrNotPen(CROP &rp);
static void OrPenNot(CROP &rp);
static void NotCopyPen(CROP &rp);
static void NotAndPen(CROP &rp);
static void NotOrPen(CROP &rp);
static void NotXorPen(CROP &rp);
};
#endif //_GOS_ROP2_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -