#include #include #include char Graphic::szClassName[]="Graphic"; Graphic::Graphic(GUIWindow &parentWnd,const String &strBitmapName,UINT controlID,UINT extraStyles,const Rect &initRect,const Font &bannerFont) : mBannerFont(bannerFont), mParentWnd(parentWnd), mxIndent(Indent), myBorder(::GetSystemMetrics(SM_CYDLGFRAME)<<1), mInitRect(initRect) { mRibbonBitmap=new ResBitmap(strBitmapName); mRibbonBitmap.disposition(PointerDisposition::Delete); mPaintHandler.setCallback(this,&Graphic::paintHandler); mCreateHandler.setCallback(this,&Graphic::createHandler); mDestroyHandler.setCallback(this,&Graphic::destroyHandler); mSizeHandler.setCallback(this,&Graphic::sizeHandler); mEraseBackgroundHandler.setCallback(this,&Graphic::eraseBackgroundHandler); insertHandler(VectorHandler::PaintHandler,&mPaintHandler); insertHandler(VectorHandler::CreateHandler,&mCreateHandler); insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler); insertHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); mParentWnd.insertHandler(VectorHandler::SizeHandler,&mSizeHandler); registerClass(); createWindow(parentWnd,controlID,extraStyles); } Graphic::~Graphic() { removeHandler(VectorHandler::PaintHandler,&mPaintHandler); removeHandler(VectorHandler::CreateHandler,&mCreateHandler); removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler); removeHandler(VectorHandler::EraseBackgroundHandler,&mEraseBackgroundHandler); mParentWnd.removeHandler(VectorHandler::SizeHandler,&mSizeHandler); } Graphic &Graphic::operator=(const Graphic &/*someGraphic*/) { // private implementation return *this; } void Graphic::registerClass(void) { HINSTANCE hProcessInstance(processInstance()); WNDCLASS wndClass; if(::GetClassInfo(hProcessInstance,szClassName,(WNDCLASS FAR *)&wndClass))return; wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC; wndClass.lpfnWndProc =(WNDPROC)Window::WndProc; wndClass.cbClsExtra =0; wndClass.cbWndExtra =sizeof(Graphic*); wndClass.hInstance =hProcessInstance; wndClass.hIcon =0; wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW); wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH); wndClass.lpszMenuName =0; wndClass.lpszClassName =szClassName; ::RegisterClass(&wndClass); } void Graphic::createWindow(GUIWindow &parentWindow,UINT controlID,UINT extraStyles) { if(!mInitRect.right())mInitRect.right(mRibbonBitmap->width()); if(!mInitRect.bottom())mInitRect.bottom(mRibbonBitmap->height()); ::CreateWindowEx(0,(LPSTR)szClassName,(LPSTR)0, WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|extraStyles,mInitRect.left(),mInitRect.top(),mInitRect.right(),mInitRect.bottom(), parentWindow,(HMENU)controlID,processInstance(),(LPSTR)(Window*)this); } CallbackData::ReturnType Graphic::createHandler(CallbackData &someCallbackData) { if(!mRibbonBitmap->isOkay())return (CallbackData::ReturnType)FALSE; myIndent=mBannerFont.charHeight()/4; mPureDevice=new PureDevice(*this); mPureDevice.disposition(PointerDisposition::Delete); mDIBitmap=new DIBitmap(*mPureDevice,*mRibbonBitmap,*mRibbonBitmap); mDIBitmap.disposition(PointerDisposition::Delete); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType Graphic::destroyHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType Graphic::eraseBackgroundHandler(CallbackData &someCallbackData) { return (CallbackData::ReturnType)TRUE; } CallbackData::ReturnType Graphic::sizeHandler(CallbackData &someCallbackData) { if(!mInitRect.right())width(mParentWnd.width()); myIndent=mBannerFont.charHeight()/4; return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType Graphic::paintHandler(CallbackData &someCallbackData) { if(!mRibbonBitmap.isOkay())return (CallbackData::ReturnType)FALSE; PaintInformation *pPaintInfo=(PaintInformation*)someCallbackData.lParam(); mDIBitmap->copyBits(mRibbonBitmap->ptrData(),mRibbonBitmap->imageExtent()); mDIBitmap->usePalette(*mPureDevice,TRUE); mDIBitmap->stretchBlt(*mPureDevice,Rect(0,0,width(),height())); mDIBitmap->usePalette(*mPureDevice,FALSE); mPureDevice->select((GDIObj)mBannerFont,TRUE); mPureDevice->setTextColor(RGBColor(255,255,255)); mPureDevice->setBkMode(PureDevice::Transparent); mPureDevice->textOut(indent(),myIndent,mCaptionString); mPureDevice->select((GDIObj)mBannerFont,FALSE); postPaint(*mPureDevice); return (CallbackData::ReturnType)FALSE; } BOOL Graphic::setCaption(const String &captionString) { mCaptionString=captionString; invalidate(FALSE); return TRUE; } const String &Graphic::getCaption(void)const { return mCaptionString; } // ************************************************************************************************** // virtuals void Graphic::postPaint(PureDevice &pureDevice) { }