コード例 #1
0
ファイル: CDcdTargetOnPaint.cpp プロジェクト: koreapyj/oudiau
CdDcdZoneXy CDcdTargetOnPaint::getDrawableZone() 
{
	CdDcdZoneXy	xyzoneRv ;
	RECT	LRect = m_pPaintstruct->rcPaint ;
	xyzoneRv.setX( CdDcdZone( LRect.left , LRect.right - LRect.left ) )
			.setY( CdDcdZone( LRect.top , LRect.bottom - LRect.top ) ) ;
	return ( xyzoneRv ) ;
}
コード例 #2
0
ファイル: CDcdTargetOnPaint.cpp プロジェクト: koreapyj/oudiau
CdDcdZoneXy CDcdTargetOnPaint::getZone() 
{
	CdDcdZoneXy	xyzoneRv ;
	RECT	LRect ;
	GetClientRect( m_hWnd , &LRect ) ;
	xyzoneRv.setX( CdDcdZone( LRect.left , LRect.right - LRect.left ) )
			.setY( CdDcdZone( LRect.top , LRect.bottom - LRect.top ) ) ;
	return ( xyzoneRv ) ;
}
コード例 #3
0
	/*
		readCentDedRessya() の下請関数
		(01)CentDedDgrRessyaの属性のうち、CentDedRessya のみで決定する属性を設定
	*/
void CentDedDgrRessya::readCentDedRessya_01_readProp( const CentDedRessya* pCentDedRessya ) 
{
	m_bIsNull = pCentDedRessya->isNull() ;
	m_eRessyahoukou = pCentDedRessya->getRessyahoukou() ;
	m_iRessyasyubetsuIndex = pCentDedRessya->getRessyasyubetsuIndex() ;
	m_strRessyabangou = pCentDedRessya->getRessyabangou() ;
	m_strRessyamei = pCentDedRessya->getRessyamei() ;
	m_strGousuu = pCentDedRessya->getGousuu() ;

	m_DgrXZone = CdDcdZone() ;
}
コード例 #4
0
ファイル: CEkiView.cpp プロジェクト: koreapyj/oudiau
void CEkiView::OnPrint(CDC* pDC, CPrintInfo* pInfo) 
{
	LogMsg( L"CEkiView::OnPrint() " ) ;
	LogMsg( CDcdTargetMfcPrintInfo::stringOf( pInfo ).c_str() ) ;

	// --------------------------------
	//	描画面を作成
	// --------------------------------
	CDcdTargetMfcPrintInfo	aCDcdTargetMfcPrintInfo( pDC, pInfo ) ;

	// --------------------------------
	//	余白を除いた領域を作成
	// --------------------------------
	CaDcdTargetItemPosition	aTargetInnerMargin( &aCDcdTargetMfcPrintInfo , 
		CdDcdZoneXy() ) ;
	{
		LogMsg( DeviceCapsToString( 
			aCDcdTargetMfcPrintInfo.getPrinterHdc() ).c_str() ) ;
	
		CconvCdPrintPageProp aCconvCdPrintPageProp ;
		CdDcdZoneXy	zonexyInneraMargin = 
			aCconvCdPrintPageProp.calcZoneInnerMargin( 
				getCDiagramEditApp()->getCdPrintPageProp() , 
				aCDcdTargetMfcPrintInfo.getPrinterHdc() ) ;
		if ( zonexyInneraMargin.getX().getSize() <= 0 ){
			zonexyInneraMargin.setX( 
				aCDcdTargetMfcPrintInfo.getZone().getX() ) ;
		}
		if ( zonexyInneraMargin.getY().getSize() <= 0 ){
			zonexyInneraMargin.setY( 
				aCDcdTargetMfcPrintInfo.getZone().getY() ) ;
		}

		aTargetInnerMargin.setZone( zonexyInneraMargin ) ;

	}

	//aTargetInnerMargin = 余白部分を除いた描画領域。
	//	単位はプリンタのピクセルです。

	// --------------------------------
	//	論理座標を設定
	// --------------------------------
	CaDcdTargetZoomDisplay	aCaDcdTargetZoomDisplay( 
		&aTargetInnerMargin , 
		aCDcdTargetMfcPrintInfo.getPrinterHdc() ) ;
	//aCaDcdTargetZoomDisplay = 余白部分を除いた描画領域。
	//	単位は、画面上の1ピクセル相当になりました。

	// --------------------------------
	//	キャプションとページ番号の部品を作成
	// --------------------------------
	Ou<CDcdText>	pdcdCaption ;
	Ou<CDcdText>	pdcdPage ;
	{
		const CentDedRosen* pCentDedRosen = 
			getCDiagramEditDoc()->getCDedRosenFileData()->getCentDedRosen() ;
		CJikokuhyouDoc* pCJikokuhyouDoc = (CJikokuhyouDoc*)GetDocument() ;

		wstring	strText ;
		//	路線名
		if ( !pCentDedRosen->getName().empty() ){
			strText += pCentDedRosen->getName() ;
			strText += L" " ;

			CString	aString ;
			aString.LoadString( IDS_WORD_EKI ) ;
			strText += (LPCTSTR)aString ;
		}
		pdcdCaption = OuNew<CDcdText>( new CDcdText( 
			strText , getCdDrawTextPropStandard() ) ) ;
	}
	// --------------------------------
	{
		CdDrawTextProp	aProp = getCdDrawTextPropStandard() ;
		CdDrawTextFormat	aFormat = aProp.getCdDrawTextFormat() ;
		aFormat.setHorizontal( aFormat.H_CENTER ) ;
		aProp.setCdDrawTextFormat( aFormat ) ;
		pdcdPage = OuNew<CDcdText>( new CDcdText( L"" ,aProp , L"99" ) ) ;
	}

	// --------------------------------
	//	キャプションとページ番号の部品・
	//	グリッドのレイアウトを決める	
	// --------------------------------
	Ou<IfDcdTarget>	pTargetCaption ;
	Ou<IfDcdTarget>	pTargetGrid ;
	Ou<IfDcdTarget>	pTargetPage ;
	{
		CdDcdZoneXy	zoneGrid = aCaDcdTargetZoomDisplay.getZone() ;
		CdDcdSizeXy	aSize ;

		pdcdCaption->getItemSize( &aCaDcdTargetZoomDisplay , &aSize ) ;
		CdDcdZoneXy zoneCaption( zoneGrid.getX() , 
			CdDcdZone( zoneGrid.getY().getPos() , aSize.getY() ) ) ;
		zoneGrid.setY( CdDcdZone().setBeginEndPos( 
			zoneCaption.getY().getEndPos() , zoneGrid.getY().getEndPos() ) ) ;
		//zoneCaption = 全領域の上部を、キャプション用に割り当てています。
		//zoneGrid = 全領域から、上部のキャプション領域を除いた領域です。

		pdcdPage->getItemSize( &aCaDcdTargetZoomDisplay , &aSize ) ;
		CdDcdZoneXy zonePage( zoneGrid.getX() , 
			CdDcdZone( zoneGrid.getY().getEndPos() - aSize.getY() , aSize.getY() ) ) ;
		zoneGrid.setY( CdDcdZone().setBeginEndPos( 
			zoneCaption.getY().getEndPos() , zonePage.getY().getPos() ) ) ;
		//zonePage = 全領域の下部を、ページ用に割り当てています。
		//zoneGrid = 上部のキャプションに続いて、下部のページ領域も除いた領域です。


		pTargetCaption = OuNew<CaDcdTargetItemPosition>( 
			new CaDcdTargetItemPosition( &aCaDcdTargetZoomDisplay , zoneCaption ) ) ;
		pTargetGrid = OuNew<CaDcdTargetItemPosition>( 
			new CaDcdTargetItemPosition( &aCaDcdTargetZoomDisplay , zoneGrid ) ) ;
		pTargetPage = OuNew<CaDcdTargetItemPosition>(
			new CaDcdTargetItemPosition( &aCaDcdTargetZoomDisplay , zonePage ) ) ;
	}
	// --------------------------------
	//	グリッドを描画
	// --------------------------------
	int iPage = 0 ;
	{
		CDcdGrid*	pCDcdGrid = m_pCWndDcdGrid->getCXDcdGrid() ;
		CaDcdGrid_PageSelector	aCaDcdGrid_PageSelector( pCDcdGrid , pTargetGrid ) ;
		aCaDcdGrid_PageSelector.setPage( pInfo->m_nCurPage - 1 ) ;
		aCaDcdGrid_PageSelector.DcDraw() ;

		if ( (int)pInfo->m_nCurPage >= aCaDcdGrid_PageSelector.getPageCount() ){
			//最終ページを印刷したら、印刷ループを終わります。
			//OnPrint() で 
			//pInfo->SetMaxPage( aCaDcdGrid_PageSelector.getPageCount() ) ;
			//	をしても効果はありません。

			pInfo->m_bContinuePrinting = false ;
		}	else	{
			pInfo->m_bContinuePrinting = true ;
		}
		
		iPage = aCaDcdGrid_PageSelector.getPage() ;
	}
	// --------------------------------
	//	キャプションとページ番号のテキストを作成
	// --------------------------------
	{
		//ページ番号を決定
		{
			wstring	strPage = wstringOf( iPage + 1) ;
			pdcdPage->setText( strPage ) ;
		}
	}
	// --------------------------------
	//	キャプションとページ番号を描画
	// --------------------------------
	{
			pdcdCaption->DcDraw( pTargetCaption ) ;
			pdcdPage->DcDraw( pTargetPage ) ;
	}
}
コード例 #5
0
ファイル: CDcdDiagram.cpp プロジェクト: koreapyj/oudiau
// ********************************
//@name IfDcDraw
// ********************************
bool CDcdDiagram::DcDraw( IfDcdTarget* pIfDcdTarget ) 
{
	bool bRv = false ;

	CdDcdFreeLineProp	linepropDot( 1 , m_colorDiaJikuColor , LINESTYLE_DOT2 ) ;
	CdDcdFreeLineProp	linepropNormal( 1 , m_colorDiaJikuColor ) ;
	CdDcdFreeLineProp	linepropBold( 2 , m_colorDiaJikuColor ) ;

	// --------------------------------
	//	DcdTargetの領域に
	//	クリッピングを行います。			
	// --------------------------------
	CaDcdTargetClip*	pTargetClip = NULL ;
	{
		CdDcdZoneXy	zonexyCentDedDgrDia = getCentDedDgrDia()->getZone() ;
		//zonexyCentDedDgrDia = ダイヤグラムの範囲を、
		//	『ダイヤグラムエンティティ座標系』で保持します。
		//	X座標は24時間分、Y座標は起点から終点までを表します。
		
		CdDcdZoneXy	zonexyDcd_CentDedDgrDia = 
			DgrToDcd( pIfDcdTarget , zonexyCentDedDgrDia ) ;
		//zonexyDcd_CentDedDgrDia = 
		//	ダイヤグラムの範囲を、『DcDraw座標系』で保持します。
		//	但し、この値をクリップ領域にすると、
		//	EndPosはクリップ領域に含まれません。
		zonexyDcd_CentDedDgrDia.setX( 
			CdDcdZone( 
				zonexyDcd_CentDedDgrDia.getX().getPos() ,
				zonexyDcd_CentDedDgrDia.getX().getSize() 
					+ DIAGRAM_SIZE_MARGIN_DCD ) ) ;
		zonexyDcd_CentDedDgrDia.setY( 
			CdDcdZone( 
				zonexyDcd_CentDedDgrDia.getY().getPos() ,
				zonexyDcd_CentDedDgrDia.getY().getSize() 
					+ DIAGRAM_SIZE_MARGIN_DCD ) ) ;
		//zonexyDcd_CentDedDgrDia = ダイヤグラムの範囲を
		//	『DcDraw座標系』で保持します。
		
		//クリップ領域は、
		//	IfDcdTargetの領域と
		//	ダイヤグラムの範囲の交差領域です。
		CdDcdZoneXy	zonexyClip = 
			pIfDcdTarget->getZone().CrossZone( zonexyDcd_CentDedDgrDia ) ;

		pTargetClip = new CaDcdTargetClip( pIfDcdTarget , zonexyClip ) ;
		pTargetClip->validate() ;
	}
	// --------------------------------
	//	描画を行う領域の計算	
	// --------------------------------
	CdDcdZoneXy	zonexyCentDedDgrDia = m_pCentDedDgrDia->getZone() ;
	//zonexyCentDedDgrDia = ダイヤグラムの範囲を、
	//	『ダイヤグラムエンティティ座標系』で保持します。
	//	X座標は24時間分、Y座標は起点から終点までを表します。
	// --------------------------------
	//	縦罫線を描画します。
	// --------------------------------
	{

		//	縦罫線は、ダイヤグラム起点時刻の次の、縦罫線描画時刻から開始
		//	(4:01で2分目なら4:02、1分目なら4:01、10分目なら4:10)
		DcdPos posDgrXVlineOrg = zonexyCentDedDgrDia.getX().getPos() ;
		{
			int iMod = zonexyCentDedDgrDia.getX().getPos() % getVlinePitch() ; 
			if ( iMod > 0 )
			{
				posDgrXVlineOrg += getVlinePitch()  - iMod ;
			}
		}
		//posDgrXVlineOrg = 時刻表示の開始位置
		//	ダイヤグラム起点時刻の次の正時から開始(4:59なら5:00、5:00なら5:00)

		for ( DcdPos posDgrX = posDgrXVlineOrg ; 
				posDgrX <= zonexyCentDedDgrDia.getX().getEndPos() ; 
				posDgrX += getVlinePitch() )
		{
			//posDgrX = ダイヤグラムエンティティ座標での、
			//	縦罫線の位置
			CDcdFreeLine	aCDcdFreeLine ;
			if ( posDgrX % getVlineBoldPitch() == 0 )
			{
				aCDcdFreeLine.setCdLineProp( linepropBold ) ;
			}
			else if ( posDgrX % getVlineMiddlePitch() == 0 )
			{
				aCDcdFreeLine.setCdLineProp( linepropNormal ) ;
			}
			else
			{
				aCDcdFreeLine.setCdLineProp( linepropDot ) ;
			}
			//	座標を、Dgr→Dcdに変換
			DcdPos posDcdX = XDgrToDcd( pTargetClip , posDgrX ) ;
			CdDcdZone	zoneDcdY = 
				YDgrToDcd( pTargetClip , zonexyCentDedDgrDia.getY() ) ;
			if ( pTargetClip->getZone().getX().getPos() - 1 <= posDcdX &&
				posDcdX < pTargetClip->getZone().getX().getEndPos() + 1 )
			{
				aCDcdFreeLine.setOrg( CdDcdPosXy( 
					posDcdX , 
					zoneDcdY.getPos() ) ) ;
				aCDcdFreeLine.setDst( CdDcdPosXy( 
					posDcdX , 
					zoneDcdY.getEndPos() ) ) ;
				aCDcdFreeLine.DcDraw( pTargetClip ) ;

				bRv = true ;
			}
		}
	}
	// --------------------------------
	//	横罫線を描画します。
	// --------------------------------
	{
		const Mu<CentDedDgrEki>* pCentDedDgrEkiCont = 
			m_pCentDedDgrDia->getCentDedDgrEkiCont() ;
		for ( int iEkiIndex = 0 ; 
				iEkiIndex < pCentDedDgrEkiCont->size() ; 
				iEkiIndex ++ )
		{
			CentDedDgrEki	aCentDedDgrEki = 
				pCentDedDgrEkiCont->get( iEkiIndex ) ;
			DcdPos posDgrY = m_pCentDedDgrDia->getDgrYPosOfEki( iEkiIndex ) ;
			CDcdFreeLine	aCDcdFreeLine ;
			if ( aCentDedDgrEki.getIsSyuyoueki() )
			{
				aCDcdFreeLine.setCdLineProp( linepropBold ) ;
			}
			else
			{
				aCDcdFreeLine.setCdLineProp( linepropNormal ) ;
			}
			//	座標を、Dgr→Dcdに変換
			DcdPos	posDcdY = YDgrToDcd( pTargetClip , posDgrY ) ;
			CdDcdZone	zoneDcdX = 
				XDgrToDcd( pTargetClip , zonexyCentDedDgrDia.getX() ) ;
			if ( pTargetClip->getZone().getY().getPos() - 1 <= posDcdY &&
				 posDcdY < pTargetClip->getZone().getY().getEndPos() + 1 )
			{
				aCDcdFreeLine.setOrg( CdDcdPosXy( 
					zoneDcdX.getPos() , 
					posDcdY ) ) ;
				aCDcdFreeLine.setDst( CdDcdPosXy( 
					zoneDcdX.getEndPos() , 
					posDcdY ) ) ;
				aCDcdFreeLine.DcDraw( pTargetClip ) ;
			}
		}
		
		
	}
	// --------------------------------
	//	列車線を描画します。
	// --------------------------------
	{
		CRessyasenDraw	aCRessyasenDraw( this , pTargetClip , 
			m_bDisplayRessyasenKudari , m_bDisplayRessyasenNobori ) ;
		aCRessyasenDraw.execute() ;
	}
	// --------------------------------
	//	列車情報を描画します。
	// --------------------------------
	{
		CRessyajouhouDraw	aCRessyajouhouDraw( this , pTargetClip ,
			m_bDisplayRessyasenKudari , m_bDisplayRessyasenNobori ) ;
		aCRessyajouhouDraw.execute() ;
	}

	// --------------------------------
	//	停車記号を描画します。
	// --------------------------------
	{
		CDcdDiagram_CStopMarkDraw	aCDcdDiagram_CStopMarkDraw( 
			this , pTargetClip ,
			m_bDisplayRessyasenKudari , m_bDisplayRessyasenNobori ) ;
		aCDcdDiagram_CStopMarkDraw.execute() ;
	}
	// --------------------------------
	if ( pTargetClip != NULL )
	{
		delete pTargetClip ;
		pTargetClip = NULL ;
	}
	return ( bRv ) ;
}