291 lines
9.2 KiB
C++
291 lines
9.2 KiB
C++
#ifndef _COMMON_PUREDEVICE_HPP_
|
|
#define _COMMON_PUREDEVICE_HPP_
|
|
#ifndef _COMMON_RGBCOLOR_HPP_
|
|
#include <common/rgbcolor.hpp>
|
|
#endif
|
|
#ifndef _COMMON_STRING_HPP_
|
|
#include <common/string.hpp>
|
|
#endif
|
|
#ifndef _COMMON_PEN_HPP_
|
|
#include <common/pen.hpp>
|
|
#endif
|
|
#ifndef _COMMON_ARRAY_HPP_
|
|
#include <common/array.hpp>
|
|
#endif
|
|
#ifndef _COMMON_POINT_HPP_
|
|
#include <common/point.hpp>
|
|
#endif
|
|
#ifndef _COMMON_GDIOBJ_HPP_
|
|
#include <common/gdiobj.hpp>
|
|
#endif
|
|
#ifndef _COMMON_RECTANGLE_HPP_
|
|
#include <common/rect.hpp>
|
|
#endif
|
|
|
|
class Window;
|
|
class Brush;
|
|
|
|
class PureDevice
|
|
{
|
|
public:
|
|
enum Disposition{DeleteDC,ReleaseDC,AssumedDC,InvalidDC};
|
|
enum DrawMode{INVALIDROP=0,R2BLACK=R2_BLACK,R2WHITE=R2_WHITE,R2NOP=R2_NOP,R2NOT=R2_NOT,
|
|
R2COPYPEN=R2_COPYPEN,R2NOTCOPYPEN=R2_NOTCOPYPEN,R2MERGEPENNOT=R2_MERGEPENNOT,
|
|
R2MASKPENNOT=R2_MASKPENNOT,R2MERGENOTPEN=R2_MERGENOTPEN,R2MASKNOTPEN=R2_MASKNOTPEN,
|
|
R2MERGEPEN=R2_MERGEPEN,R2NOTMERGEPEN=R2_NOTMERGEPEN,R2MASKPEN=R2_MASKPEN,
|
|
R2NOTMASKPEN=R2_NOTMASKPEN,R2XORPEN=R2_XORPEN,R2NOTXORPEN=R2_NOTXORPEN};
|
|
enum BltMode{Blackness=BLACKNESS,DstInvert=DSTINVERT,MergeCopy=MERGECOPY,MergePaint=MERGEPAINT,
|
|
NotSourceCopy=NOTSRCCOPY,NotSourceErase=NOTSRCERASE,PatternCopy=PATCOPY,
|
|
PatternInvert=PATINVERT,PatternPaint=PATPAINT,SourceAnd=SRCAND,
|
|
SourceCopy=SRCCOPY,SourceErase=SRCERASE,SourceInvert=SRCINVERT,
|
|
SourcePaint=SRCPAINT,White=WHITENESS};
|
|
enum BkMode{Opaque=OPAQUE,Transparent=TRANSPARENT};
|
|
PureDevice(void);
|
|
PureDevice(const Window &someWindow);
|
|
PureDevice(HWND hWnd);
|
|
PureDevice(HDC hDC);
|
|
PureDevice(const PureDevice &somePureDevice);
|
|
virtual ~PureDevice();
|
|
PureDevice &operator=(const PureDevice &somePureDevice);
|
|
PureDevice &operator=(const Window &someWindow);
|
|
PureDevice &operator=(HWND hWnd);
|
|
operator HDC(void)const;
|
|
void destroyDevice(void);
|
|
WORD select(const GDIObj someGDIObj,WORD selState=TRUE);
|
|
WORD compatibleDevice(const PureDevice &somePureDevice);
|
|
WORD compatibleDevice(void);
|
|
WORD displayDevice(void);
|
|
WORD screenDevice(void);
|
|
WORD line(const Point &firstPoint,const Point &secondPoint,const Pen &somePen)const;
|
|
WORD line(const Point &firstPoint,const Point &secondPoint,const RGBColor &rgbColor)const;
|
|
WORD line(const Point &firstPoint,const Point &secondPoint)const;
|
|
WORD move(const Point &movePoint)const;
|
|
WORD square(const Point ¢erPoint,WORD lineLength,RGBColor rgbColor);
|
|
WORD roundRectangle(const Point &upperLeftPoint,const Point &lowerRightPoint,DWORD width,DWORD height);
|
|
WORD roundRectangle(const Point ¢erPoint,int radius);
|
|
WORD colorRect(const Rect &rect,const RGBColor &fillColor)const;
|
|
WORD outlineRect(const Rect &rect,const Pen &pen);
|
|
WORD horizontalResolution(void)const;
|
|
WORD verticalResolution(void)const;
|
|
WORD aspectValue(const Window &someWindow)const;
|
|
WORD isOkay(void)const;
|
|
WORD circle(Window &displayWindow,const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const;
|
|
WORD circle(const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const;
|
|
WORD crossHair(const Point &midPoint,WORD sectionlength,const Pen &somePen);
|
|
WORD crossHairs(Array<Point> &midPoints,WORD sectionLength,const Pen &somePen);
|
|
WORD crossHairs(Array<Point> &midPoints,WORD sectionLength,RGBColor rgbColor);
|
|
WORD floodFill(const Point &xyPoint,const RGBColor &fillColor,const RGBColor &boundaryColor)const;
|
|
WORD bitBlt(const Rect &dstRect,const PureDevice &srcDevice,const Point &srcPoint,BltMode bltMode=SourceCopy);
|
|
WORD stretchBlt(const Rect &dstRect,const PureDevice &srcDevice,const Rect &srcRect,BltMode bltMode=SourceCopy);
|
|
WORD setDrawMode(DrawMode ropCode);
|
|
RGBColor setPixel(const Point &somePoint,const RGBColor &paletteColor)const;
|
|
BOOL setPixelv(const Point &somePoint,const RGBColor &paletteColor)const;
|
|
RGBColor setTextColor(const RGBColor &rgbColor)const;
|
|
RGBColor setBkColor(const RGBColor &rgbColor)const;
|
|
RGBColor getBkColor(void)const;
|
|
BOOL fillRect(const Rect &rect,Brush &brush);
|
|
BOOL textOut(int xLoc,int yLoc,const char *lpszString)const;
|
|
bool drawText(const Point &point,const String &strText)const;
|
|
BOOL getTextExtentPoint32(LPCTSTR lpszString,LPSIZE lpSizeStruct)const;
|
|
int setBkMode(BkMode bkMode)const;
|
|
RGBColor setPixel(const Point &somePoint,WORD paletteIndex)const;
|
|
RGBColor getPixel(const Point &somePoint)const;
|
|
Disposition disposition(void)const;
|
|
void disposition(Disposition disposition);
|
|
HDC getDC(void)const;
|
|
private:
|
|
enum {DefaultAspect=100};
|
|
void unselect(void);
|
|
WORD circle(WORD aspectValue,const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const;
|
|
void lineDraw(const Point &firstPoint,const Point &secondPoint)const;
|
|
|
|
HDC mhDC;
|
|
HWND mhParent;
|
|
GDIObj mGDIObjPrev;
|
|
Disposition mDisposition;
|
|
int mPrevDrawMode;
|
|
};
|
|
|
|
inline
|
|
PureDevice::PureDevice(void)
|
|
: mhDC(0), mhParent(0), mDisposition(InvalidDC), mGDIObjPrev(0), mPrevDrawMode(INVALIDROP)
|
|
{
|
|
}
|
|
|
|
inline
|
|
PureDevice::PureDevice(HWND hParent)
|
|
: mhDC(0), mhParent(hParent), mDisposition(ReleaseDC), mGDIObjPrev(0), mPrevDrawMode(INVALIDROP)
|
|
{
|
|
if(!mhParent||!::IsWindow(mhParent))return;
|
|
mhDC=::GetDC(mhParent);
|
|
}
|
|
|
|
inline
|
|
PureDevice::PureDevice(const PureDevice &somePureDevice)
|
|
: mhDC(0), mhParent(0), mDisposition(DeleteDC), mGDIObjPrev(0), mPrevDrawMode(INVALIDROP)
|
|
{
|
|
if(!somePureDevice.mhDC)return;
|
|
mhDC=::CreateCompatibleDC(somePureDevice.mhDC);
|
|
}
|
|
|
|
inline
|
|
PureDevice::PureDevice(HDC hDC)
|
|
: mhDC(hDC), mhParent(0), mDisposition(AssumedDC), mGDIObjPrev(0), mPrevDrawMode(INVALIDROP)
|
|
{
|
|
}
|
|
|
|
inline
|
|
void PureDevice::unselect(void)
|
|
{
|
|
if(!isOkay())return;
|
|
if(mGDIObjPrev){::SelectObject(mhDC,mGDIObjPrev);mGDIObjPrev=0;}
|
|
}
|
|
|
|
inline
|
|
RGBColor PureDevice::setPixel(const Point &somePoint,const RGBColor &paletteColor)const
|
|
{
|
|
return RGBColor(::SetPixel(mhDC,somePoint.x(),somePoint.y(),paletteColor));
|
|
}
|
|
|
|
inline
|
|
BOOL PureDevice::setPixelv(const Point &somePoint,const RGBColor &paletteColor)const
|
|
{
|
|
return RGBColor(::SetPixelV(mhDC,somePoint.x(),somePoint.y(),paletteColor));
|
|
}
|
|
|
|
inline
|
|
RGBColor PureDevice::setPixel(const Point &somePoint,WORD paletteIndex)const
|
|
{
|
|
return RGBColor(::SetPixel(mhDC,somePoint.x(),somePoint.y(),PALETTEINDEX(paletteIndex)));
|
|
}
|
|
|
|
inline
|
|
RGBColor PureDevice::getPixel(const Point &somePoint)const
|
|
{
|
|
return RGBColor(::GetPixel(mhDC,somePoint.x(),somePoint.y()));
|
|
}
|
|
|
|
inline
|
|
PureDevice::operator HDC(void)const
|
|
{
|
|
return mhDC;
|
|
}
|
|
|
|
inline
|
|
WORD PureDevice::circle(const Point &xyPoint,WORD radius,const RGBColor &someRGBColor)const
|
|
{
|
|
return circle(DefaultAspect,xyPoint,radius,someRGBColor);
|
|
}
|
|
|
|
inline
|
|
void PureDevice::lineDraw(const Point &firstPoint,const Point &secondPoint)const
|
|
{
|
|
::MoveToEx(mhDC,firstPoint.x(),firstPoint.y(),0);
|
|
::LineTo(mhDC,secondPoint.x(),secondPoint.y());
|
|
}
|
|
|
|
inline
|
|
WORD PureDevice::roundRectangle(const Point &upperLeftPoint,const Point &lowerRightPoint,DWORD width,DWORD height)
|
|
{
|
|
if(!isOkay())return FALSE;
|
|
return ::RoundRect(*this,upperLeftPoint.x(),upperLeftPoint.y(),lowerRightPoint.x(),lowerRightPoint.y(),width,height);
|
|
}
|
|
|
|
inline
|
|
WORD PureDevice::setDrawMode(DrawMode ropCode)
|
|
{
|
|
if(!isOkay())return FALSE;
|
|
if(INVALIDROP!=mPrevDrawMode)::SetROP2(*this,mPrevDrawMode);
|
|
if(INVALIDROP!=ropCode)mPrevDrawMode=::SetROP2(*this,ropCode);
|
|
else mPrevDrawMode=ropCode;
|
|
return TRUE;
|
|
}
|
|
|
|
inline
|
|
WORD PureDevice::bitBlt(const Rect &dstRect,const PureDevice &srcDevice,const Point &srcPoint,BltMode bltMode)
|
|
{
|
|
if(!isOkay())return FALSE;
|
|
return ::BitBlt(*this,dstRect.left(),dstRect.top(),dstRect.right(),dstRect.bottom(),srcDevice,srcPoint.x(),srcPoint.y(),bltMode);
|
|
}
|
|
|
|
inline
|
|
WORD PureDevice::stretchBlt(const Rect &dstRect,const PureDevice &srcDevice,const Rect &srcRect,BltMode bltMode)
|
|
{
|
|
if(!isOkay())return FALSE;
|
|
return ::StretchBlt(*this,dstRect.left(),dstRect.top(),dstRect.right(),dstRect.bottom(),srcDevice,srcRect.left(),srcRect.top(),srcRect.right(),srcRect.bottom(),bltMode);
|
|
}
|
|
|
|
inline
|
|
RGBColor PureDevice::setBkColor(const RGBColor &rgbColor)const
|
|
{
|
|
if(!isOkay())return RGBColor(0,0,0);
|
|
return ::SetBkColor(mhDC,rgbColor);
|
|
}
|
|
|
|
inline
|
|
RGBColor PureDevice::getBkColor(void)const
|
|
{
|
|
return RGBColor(::GetBkColor(mhDC));
|
|
}
|
|
|
|
inline
|
|
WORD PureDevice::move(const Point &movePoint)const
|
|
{
|
|
if(!isOkay())return FALSE;
|
|
return ::MoveToEx(mhDC,movePoint.x(),movePoint.y(),(LPPOINT)0);
|
|
}
|
|
|
|
inline
|
|
RGBColor PureDevice::setTextColor(const RGBColor &rgbColor)const
|
|
{
|
|
if(!isOkay())return RGBColor();
|
|
return ::SetTextColor(mhDC,rgbColor);
|
|
}
|
|
|
|
inline
|
|
BOOL PureDevice::textOut(int xLoc,int yLoc,const char *lpszString)const
|
|
{
|
|
if(!isOkay()||!lpszString)return FALSE;
|
|
return ::TextOut(mhDC,xLoc,yLoc,lpszString,::strlen(lpszString));
|
|
}
|
|
|
|
inline
|
|
bool PureDevice::drawText(const Point &point,const String &strText)const
|
|
{
|
|
if(!isOkay()||strText.isNull())return FALSE;
|
|
return ::TextOut(mhDC,point.x(),point.y(),strText.str(),strText.length());
|
|
}
|
|
|
|
inline
|
|
BOOL PureDevice::getTextExtentPoint32(LPCTSTR lpszString,LPSIZE lpSizeStruct)const
|
|
{
|
|
if(!isOkay()||!lpszString)return FALSE;
|
|
return ::GetTextExtentPoint32(mhDC,lpszString,::strlen(lpszString),lpSizeStruct);
|
|
}
|
|
|
|
inline
|
|
int PureDevice::setBkMode(BkMode bkMode)const
|
|
{
|
|
if(!isOkay())return FALSE;
|
|
return ::SetBkMode(mhDC,bkMode);
|
|
}
|
|
|
|
inline
|
|
PureDevice::Disposition PureDevice::disposition(void)const
|
|
{
|
|
return mDisposition;
|
|
}
|
|
|
|
inline
|
|
void PureDevice::disposition(Disposition disposition)
|
|
{
|
|
mDisposition=disposition;
|
|
}
|
|
|
|
inline
|
|
HDC PureDevice::getDC(void)const
|
|
{
|
|
return mhDC;
|
|
}
|
|
#endif
|